VPS:通过SSH备份Nginx配置 整站代码和数据库

转自点点 11 年前 回复

, , , , , , , ,

装lnmp都知道,利用SSH备份是很快很简单的事。其实官方也提供了sh脚本,下载地址脚本下载地址:http://soft.vpser.net/lnmp/backup.sh。

运行前:

需要提前在VPS安装好lftp,lftp功能上比较强大,CentOS直接执行:yum install lftp,Debian执行:apt-get install lftp

需要在VPS上创建/home/backup/ 目录,在FTP上创建backup目录。

根据官方的sh文件修改也行。因为某些方面的需求,我也根据自己的情况修改了一下,觉得更符合用户的需要。

backup.sh内容如下:

#!/bin/bash
#Funciont: Backup website and mysql database
#Author: 皇家元林
#Website: https://hjyl.org/
#IMPORTANT!!!Please Setting the following Values!
######~Set MySQL UserName and password~######
MYSQL_UserName=数据库用户名
MYSQL_PassWord=数据库密码
######~Set MySQL Database you want to backup~######
Backup_Database_Name1=数据库名称
Backup_Database_Name2=数据库名称
Backup_Database_Name3=数据库名称
Backup_Database_Name4=数据库名称
                                
######~Set FTP Information~######
FTP_HostName=FTP地址
FTP_UserName=用户名
FTP_PassWord=密码
FTP_BackupDir=/home/backup #路径
                                
#Values Setting END!
TodayWWWBackup=xhjyl_$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql.gz
OldWWWBackup=xhjyl_$(date -d -7day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -7day +"%Y%m%d").sql.gz
                                
# backup nginx configure files
tar -czvf /home/wwwroot/nginx_conf_$(date +%Y%m%d).tar.gz /usr/local/nginx/conf/vhost
                                
#backup mysql
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 | gzip > /home/backup/db-$Backup_Database_Name1-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name2 | gzip > /home/backup/db-$Backup_Database_Name2-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name3 | gzip > /home/backup/db-$Backup_Database_Name3-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name4 | gzip > /home/backup/db-$Backup_Database_Name4-$(date +"%Y%m%d").sql.gz
                                
# backup wwwroot and mysql
tar -czvf /home/backup/xhjyl_$(date +%Y%m%d).tar.gz /home/wwwroot --exclude=ftp --exclude=phpmyadmin
rm $OldWWWBackup
rm $OldDBBackup
cd /home/backup
lftp fish://$FTP_UserName:$FTP_PassWord@$FTP_HostName << EOF
cd $FTP_BackupDir
mrm $OldWWWBackup
mrm $OldDBBackup
mput $TodayWWWBackup
mput $TodayDBBackup
bye
EOF

这里需要说明一下不同地方:我这里添加了Nginx的配置,并备份到/home/wwwroot,所以直接跟整站代码一起打包就好了。至于数据库还是分开打包好,不然数据库太大,容易导出却不容易导入。 --exclude=ftp 这个ftp是不需要打包的文件夹。最后是lftp,我这里是直接发到我另外一个VPS上,因为那个搭建FTP,所以用SFTP的功能。经过测试,这段代码是正常的。即使在运行的时候,开始有tar: Removing leading `/’ from member names 这样的警告,那是正常的,这表示:

这样的一个压缩包,如果我们再去解开,就会当前目录(也即此例中的“~”)下再新建出“./home/robin/” 两级目录。对于这样的压缩包,解压方法是使用参数 “-C”指解压的目录为根目录(“/”):tar -xzvf robin.tar.gz -C /

如果强制使用绝对路径,可加上P参数。比如tar -czvPf robin.tar.gz /home/robin/

完了。

支付宝打赏微信打赏

如果此文对你有帮助,欢迎打赏作者。

发表评论

欢迎回来 (打开)

(必填)