对于站长来说,数据可是命根子。本来11区的樱花VPS稳定性毋庸置疑,代购的老易也是尽职尽责,然而遭不住同ip段总有人滥用,樱花那边会无差别ban掉整个ip段的所有机器,所以还是每天备份做好保险吧。使用樱花的VPS有3年多了,以前是用同步网站文件夹到本地电脑的方式备份。最近入手了新的备份VPS,干脆来个三重保险,把数据打包同步到七牛云存储上(点此免费注册,可享有10G免费存储空间和4G免费CDN流量)。
网上找出来很多脚本,基本都是根据张戈博客的代码修改的,weindy也使用了这个脚本。下面记录操作的步骤。
以root账户登陆VPS后,输入(/root是该脚本保存的路径,个人习惯将这些脚本放到/root下):
1 | vi /root/backup.sh |
将以下备份的sh脚本代码粘入(为了数据安全,压缩包加了密码,请自行替换下面代码中的两处“你的密码”):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #!/bin/bash #Author:ZhangGe #Des:Backup database and webfile. #Date:2014-8-28 TODAY=`date +%u` if [ -z $1 ];then echo Needed Usage arguments. Please Use --help to get more infomation. exit 1 fi test -f /etc/profile && . /etc/profile >/dev/null 2>&1 zip --version >/dev/null || yum install -y zip ZIP=$(which zip) MYSQLDUMP=$(which mysqldump) if [ "$1" == "db" ];then domain=$2 dbname=$3 mysqluser=$4 mysqlpd=$5 back_path=$6 test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2) cd $back_path $MYSQLDUMP -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhangge.net..." && exit 2) $ZIP -P 你的密码 -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql elif [ "$1" == "file" ];then domain=$2 site_path=$3 back_path=$4 test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2) test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2) test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip $ZIP -P 你的密码 -9r $back_path/$domain\_$TODAY\.zip $site_path elif [ "$1" == "--help" ];then clear echo =====================================Help infomation========================================= echo 1. Use For Backup database: echo The \$1 must be \[db\] echo \$2: \[domain\] echo \$3: \[dbname\] echo \$4: \[mysqluser\] echo \$5: \[mysqlpassword\] echo \$6: \[back_path\] echo echo For example:./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net echo echo 2. Use For Backup webfile: echo The \$1 must be [\file\]: echo \$2: \[domain\] echo \$3: \[site_path\] echo \$4: \[back_path\] echo echo For example:./backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net echo =====================================End of Hlep============================================== exit 0 else echo "Error!Please Usage --help to get help infomation!" exit 2 fi |
然后按esc,输入英文冒号+wq保存退出。再给脚本添加可执行权限:
1 | chmod +x backup.sh |
这个脚本的用法具体为:
备份网站:
1 | ./backup.sh file cgunc.com /home/www/cgunc.com /home/backup |
参数1:备份类型,file为文件,db为数据库
参数2:域名,备份文件名称
参数3:需备份的网站文件目录
参数4:备份文件存放目录
备份数据库:
1 | ./backup.sh db cgunc.com wordpress dbname dbpwd /home/backup |
参数1:备份类型,db为数据库,file为文件
参数2:域名,备份文件名称
参数3:数据库名称
参数4:数据库登陆用户名
参数5:数据库登陆密码
参数6:备份文件存放目录
既然是自动备份,以上命令肯定不用每天都手动输入的。输入以下命令建立计划任务列表:
1 | crontab -e |
粘贴以下代码:
1 2 3 | #Backup cgunc.com 30 3 * * * /root/backup.sh file cgunc.com /home/www /home/backup >/dev/null 2>&1 00 4 * * * /root/backup.sh db cgunc.com wordpress root 数据库密码 /home/backup >/dev/null 2>&1 |
同样按esc,输入英文冒号+wq保存退出。
通过以上代码,每天凌晨3点30分会自动备份网站,4点会自动备份数据库。但是,这些备份仅仅是备份到本机,通过七牛云提供的新命令qshell(网上文章一般都介绍的qrsbox,然而官方已经废弃,不知道是否还能使用,新命令qshell更强大更全面,可参考帮助文档))可以将加密码的备份压缩包同步到七牛云上。
先下载qshell,当前版本为v2.3.4:点击下载
下载之后压缩包里有一堆对应不同平台,根据你VPS的linux版本,将qshell_linux_x86(对应32位)或者qshell_linux_x64(对应64位)改名为qshell,通过FTP等上传方式上传到VPS,放在你习惯的文件夹内,weindy这边放在/home下。然后为文件添加可执行权限:
1 2 | cd /home chmod +x qshell |
为了让qshell能在任意位置运行,需要把qshell所在的路径写入环境变量,这里CentOS默认的配置文件在/root/.bashrc,所以进行以下操作:
1 2 | cd vi /root/.bashrc |
然后按insert键,切换到插入模式,在# User specific aliases and functions这行下面插入
1 | export PATH=$PATH:/home |
之后按半角冒号,输入wq然后回车,保存设置文件。
再来,需要设置七牛云的账号和密钥信息,请将ak,sk和name替换成自己的密钥和账号。其中,ak和sk在个人中心>密钥管理可以看到,name是你注册七牛云的邮箱:
1 | qshell account ak sk name |
此时,就可以用命令测试是否能同步了,下方的src-dir参数是备份所在的压缩包路径,bucket是在七牛云建立的对象存储空间:
1 | qshell qupload2 --src-dir=/home/backup --bucket=cgunc |
执行结果如下:
1 2 3 4 5 6 7 8 | #qshell qupload2 --src-dir=/home/backup --bucket=cgunc Tip: you can set <ThreadCount> value between 1 and 2000 to improve speed Writing upload log to file /root/.qshell/qupload/bd0c3a878123bc7539cb37e62c70aacd/bd0c3a878123bc7539cb37e62c70aacd.log Uploading /home/backup/cgunc.com_5.zip => cgunc.com_5.zip [1/2, 50.0%] ... Uploading /home/backup/cgunc.com_db_5.zip => cgunc.com_db_5.zip [2/2, 100.0%] ... See upload log at path /root/.qshell/qupload/bd0c3a878123bc7539cb37e62c70aacd/bd0c3a878123bc7539cb37e62c70aacd.log |
如果执行完成,看到100%字样,说明已经同步完成。或者可以查看最后这行log日志文件,里面也有上传进度的记录。
最后,我们要让系统每天自动运行这个上传脚本。同样再次输入:
1 | crontab -e |
将同步代码粘入下方,需要注意第一个参数是备份保存的路径,第二个参数是在七牛云建立的存储空间名称:
1 2 | #Sync to Qiniu 30 4 * * * qshell qupload2 --src-dir=/home/backup --bucket=cgunc >/dev/null 2>&1 & |
该代码每晚4点30分执行,可以自行调整时间。你也可以举一反三,用来备份nginx配置或者科学上网的那堆设置什么的。不过因为压缩包有密码,备份的脚本一定要记好密码是什么,不然万一VPS挂了,需要恢复备份的时候解不开压缩包那可真就GG了哈。