奋青和草根,兴趣较多,爱好户外运动和互联网,偶尔拍拍照片。在这里记录一些路上的风景,记录我们在这个迷茫年代里的一些坏想法和恶观点。

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

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

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

1、代码backup.sh

#!/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 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 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 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 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 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. 登陆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建立任务列表。输入以下代码:

#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建立任务列表。在末尾输入以下代码:

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

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

评论已关闭

© 2017 边走边说@Walking Talking. 由 Typecho 强力驱动. 又拍云 提供分发. 主机托管 Linode.