尽管开通了Vultr的backup服务,但是依旧有种“总有刁民想害朕”的想法,于是为了双保险将网站定时备份到网盘,国内服务器的可选阿里云OSS、七牛等,国外的话还是感觉DropBox靠谱点,我自己是DropBox的忠实用户,于是就备份到DropBox吧。

1.将网站与数据库打包

要备份到DropBox,首先需要将网站源码、数据库等都打包。在/data/script文件夹中新建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
#!/bin/bash
#Author:ZhangGe
#Des:Backup database and webfile.
#Date:2014-8-28
TODAY=$(date +"%Y-%m-%d")

if [ -z $1 ];then
echo Needed Usage arguments. Please Use --help to get more infomation.
exit 1
fi

if [ "$1" == "db" ];then
domain=$2
dbname=$3
mysqluser=$4
mysqlpd=$5
back_path=$6
mysql_host=$7
cd $back_path
mysqldump -h$mysql_host -u$mysqluser -p$mysqlpd $dbname>$back_path/$domain\_db_$TODAY\.sql
tar cvzf $back_path/$domain\_db_$TODAY\.tar.gz $domain\_db_$TODAY\.sql --remove-files

elif [ "$1" == "file" ];then
domain=$2
site_path=$3
back_path=$4
tar cvzf $back_path/$domain\_file_$TODAY\.tar.gz $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 \$7: \[mysql_hosst\]
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

测试脚本:

1
bash backup.sh file blog.liyang.pro /var/www/blog.liyang.pro /data/backup/bash backup.sh db blog.liyang.pro dbname dbuser dbpassword /data/backup/ 10.99.0.2

然后在/data/backup中查看文件

1
2
ls /data/backup/
blog.liyang.pro_db_2018-10-14.tar.gz blog.liyang.pro_file_2018-10-14.tar.gz

2.创建DropBox App

登录DropBox后,点击https://www.dropbox.com/developers/apps,点击Create App。

点击Create App,此时App就已经创建成功,并且接入Setting菜单。找到Oauth 2,点击Generate,生成Token。

记下这个Token。

3.配置DropBox脚本

下载DropBox脚本:

1
2
3
4
cd /data/script/
wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
chmod +x dropbox_uploader.sh
sh dropbox_uploader.sh

执行脚本,输入刚才的Token

1
bash dropbox_uploader.sh

新增上传备份文件到DropBox的脚本

1
vim /data/script/auto_upload_dropbox.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
#!/bin/bash 
#
# Dropbox App 应用根目下自动创建日期文件夹
DROPBOX_DIR=/$(date +%Y-%m-%d)
# 网站备份文件目录
BACKUP_DIR=/data/backup
# 定义要上传的文件名
CURRENT_FILE=www.liyang.pro_file_$(date +%Y-%m-%d).tar.gz
CURRENT_DB=www.liyang.pro_db_$(date +%Y-%m-%d).tar.gz
# 定义要删除3天以上文件名
THREE_DAY_FILE=www.liyang.pro_file_$(date -d -3day +"%Y-%m-%d").tar.gz
THREE_DAY_DB=www.liyang.pro_db_$(date -d -3day +"%Y-%m-%d").tar.gz
# 配置DROPBOX中要删除的目录(默认清理Dropbox中30天的备份)
DEL_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d)
# 清理本地过时的备份(默认清理3天,也可以用find命令清理)
echo -ne "Delete local data of 3 days old..."
rm -rf $BACKUP_DIR/$THREE_DAY_FILE $BACKUP_DIR/$THREE_DAY_DB
echo -e "Done"
# 开始上传到 Dropbox
echo -e "Start uploading..."
bash /data/script/dropbox_uploader.sh upload $BACKUP_DIR/$CURRENT_FILE $DROPBOX_DIR/
bash /data/script/dropbox_uploader.sh upload $BACKUP_DIR/$CURRENT_DB $DROPBOX_DIR/
# 清理 Dropbox 里 30 天前的旧数据
RESULT=`bash /data/script/dropbox_uploader.sh search $DEL_DROPBOX_DIR`
HIT="[F]"
IDX=`expr index "${RESULT}" ${HIT}`
if [ $IDX -eq 0 ];then
echo "Dropbox $DEL_DROPBOX_DIR is not found."
else
bash /data/script/dropbox_uploader.sh delete $DEL_DROPBOX_DIR
echo "DELETE Dropbox $DEL_DROPBOX_DIR DONE ."
fi
echo -e "All done."

4.配置Crontab

1
crontab -e

新增如下内容:

1
2
3
00 01 * * * bash /data/script/backup.sh db blog.liyang.pro dbname dbuser dbpassword /data/backup/ 10.99.0.2 >/dev/null 2>&1
30 01 * * * bash /data/script/backup.sh file blog.liyang.pro /var/www/blog.liyang.pro /data/backup/ >/dev/null 2>&1
00 03 * * * bash /data/script/auto_upload_dropbox.sh >/dev/null 2>&1

此时即可实现自动备份到DropBox。