VPS定时自动备份并同步到七牛云

Homezz使用了6年,可以算是比较稳定了。但是最近为了折腾SSL,还是决定将边走边说搬回了VPS上。家搬好了,SSL也折腾上了,VPS备份怎么办?上一次使用的脚本早就不知道丢哪里去了,来吧!重头再来。先弄个脚本使用本机打包,再弄个工具同步到七牛云去。

从昨天到今天,网上找出来很多脚本,用起来都不顺手,唯独张戈的这份代码用起来感觉挺爽。原来设计的是7天循环备份,我改成了30天自动循环备份,嘿嘿,心大,七天备份哪够啊。我修改的脚本代码:

1、代码backup.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
61
62
#!/bin/bash
#Author:ZhangGe
#Des:Backup database and webfile.
#Date:2014-8-28
#./backup.sh file huaqing.org /home/wwwroot/huaqing.org /home/backups
#./backup.sh db huaqing.org blog_db dbname dbpwd /home/backups
TODAY=`date +%d`
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 || apt-get install 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 huaqing.org..." && 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 huaqing.org..." && exit 2)
$ZIP -P password -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 huaqing.org..." && exit 2)
test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to huaqing.org..." && exit 2)
test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
$ZIP -P password -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 huaqing.org huaqing_db huaqing 123456 /home/wwwbackup/huaqing.org
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 huaqing.org /home/wwwroot/huaqing.org /home/wwwbackup/huaqing.org
echo =====================================End of Hlep==============================================
exit 0
else
echo "Error!Please Usage --help to get help infomation!"
exit 2
fi
  1. 登陆VPS,将以上脚本保存为/root/tools/backup.sh,记得修改password为你自己的压缩密码。
  2. chmod +x backup.sh 给脚本添加可执行权限。

2、备份数据

备份网站:./backup.sh file huaqing.org /home/wwwroot/huaqing.org /home/backups

  • 参数1:备份类型,file为文件,db为数据库
  • 参数2:域名,备份文件名称
  • 参数3:需备份的网站文件目录
  • 参数4:备份文件存放目录

备份数据库:#./backup.sh db huaqing.org blog_db dbname dbpwd /home/backups

  • 参数1:备份类型,db为数据库,file为文件
  • 参数2:域名,备份文件名称
  • 参数3:数据库名称
  • 参数4:数据库登陆用户名
  • 参数5:数据库登陆密码
  • 参数6:备份文件存放目录

3、定时备份

我们通过Linux的计划任务进行定时备份,执行crontab -e建立任务列表。输入以下代码:

1
2
3
#Backup huaqing.org
20 2 * * * /root/tools/backup.sh file huaqing.org /home/wwwroot/huaqing.org /home/backups >/dev/null 2>&1
25 2 * * * /root/tools/backup.sh db huaqing.org blog_db dbname dbpwd /home/backups >/dev/null 2>&1

4、同步到七牛云存储

通过以以代码,每天凌晨2点20分会自动备份网站,2点25分会自动备份数据库。但是,这些备份仅仅是备份到本机而以,下面我们再通过七牛云提供的qrsbox,将加了密码的备份数据同步到七牛云(帮助文档)。

  1. wget http://devtools.qiniu.com/linux/amd64/qrsboxcli
  2. chmod +x backup.sh 给脚本添加可执行权限
  3. 初始化命令./qrsboxcli init <AccessKey> <SecretKey> <SyncDir> <Bucket>

VPS自动备份到七牛云

5、自动同步

自动同步还是需要借助Linux的任务,执行crontab -e建立任务列表。在末尾输入以下代码:

1
2
3
#Backup Sync QINIU
0 3 * * * /root/tools/qrsboxcli sync &
15 3 * * * /root/tools/qrsboxcli stop

通过以上的代码,可以举一反三,备份多个网站或多个文件夹,无非就是多添加几条crontab而以。我的VPS上执行自动备份的除了有网站和数据库外,还有Nginx的配置文件和SSL证书文件等。