尽管开通了Vultr的backup服务,但是依旧有种“总有刁民想害朕”的想法,于是为了双保险将网站定时备份到网盘,国内服务器的可选阿里云OSS、七牛等,国外的话还是感觉DropBox靠谱点,我自己是DropBox的忠实用户,于是就备份到DropBox吧。
1.将网站与数据库打包
要备份到DropBox,首先需要将网站源码、数据库等都打包。打包脚本来自张戈博客,仅对其加了一个-h参数,用来指定数据库的IP地址。在/data/script文件夹中新建backup.sh,将如下填入其中:
#!/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
测试脚本:
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中查看文件
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脚本:
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
bash dropbox_uploader.sh
新增上传备份文件到DropBox的脚本
vim /data/script/auto_upload_dropbox.sh
填入如下内容:
#!/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
crontab -e
新增如下内容:
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。