Linux/vps本地七天循环备份和七牛远程备份脚本 | 张戈博客

  • 时间:
  • 浏览:1

博客前些时间分享过一次vps远程备份到七牛的工具,全傻瓜式交互操作,但也六个多多多很大的缺憾,那就是 不足英文灵活,在无人干预的状况下,无法完成对多个站点的远程备份设置。

这次博客搬家到vps后,张戈花了点时间完善了下,实现了多站点,多数据库的本地七天循环备份和同步备份至七牛云存储的脚本。

一、类型说明

①、七天循环备份

受服务器空间制约,大伙不机会在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间。大伙折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件。从而只备份7份数据,不至于占用有点硬大的空间。

机会,你的vps很小家子气或是网站数据太庞大,那还可不可以再折中一下,仅在星期二、四、六做备份,即总共三份数据。甚至还可不可以选六个多多星期的某一天做备份,即一周备份一次,也是可不可以的。

在空间允许的状况下,当时人推荐做7天 循环备份,在vps数据完整丢失的刚刚,能最大程度的容灾,恢复到丢失刚刚,甚至是当天深夜备份的所有数据,非常完美!

②、七牛远程备份

七牛远程备份就是 将本地的7天 备份的数据每天同步至七牛云存储私人空间,就算整台vps奔溃时,还能从容的恢复数据。大慨双保险,要知道七牛和你的vps一起宕机的几率是非常小的。

二、准备工作

①、采集vps已有网站对应的数据库用户名和密码(如不清楚可直接用mysql的root帐号);

②、采集vps已有网站的根目录所在路径,比如 /home/wwwroot/zhang.ge

③、想好本地愿意 存放备份文件的路径,比如/home/wwwbackup

④、还那末七牛帐号的,点此注册六个多多,而且 新建六个多多私人空间(为了数据安全,请勿使用公开空间,仅恢复数据时临时切换到公开状况即可),记录空间名以及帐号密钥:

三、本地七天备份

①、登录VPS编写脚本

脚本代码如下:

#!/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 zhang.ge..." && 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 zhang.ge..." && exit 2)
        $ZIP -Pmypassword -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 zhang.ge..." && exit 2)
        test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhang.ge..." && exit 2)
        test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
        $ZIP -Pmypassword -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 zhang.ge zhangge_db zhangge 123456 /home/wwwbackup/zhang.ge
        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 zhang.ge /home/wwwroot/zhang.ge /home/wwwbackup/zhang.ge
        echo =====================================End of Hlep==============================================
        exit 0
else
        echo "Error!Please Usage --help to get help infomation!"
        exit 2
fi

使用说明:

②、将代码中的2处 mypassword 改成你自定义的压缩密码(确保数据安全),并保存为backup.sh刚刚,执行chmod +x backup.sh 赋执行权限。

为了处置一键复制转码大问提,下文已打包分享[点此直达]

Ps:下载的代码包那末加密打包,请自行参考上述代码,自行换成【-P密码】参数。

③、执行./backup.sh –help 可获得如下帮助说明:

④、备份数据库

命令行示例如下:

./backup.sh db zhang.ge zhangge_db zhangge 123456 /home/wwwbackup/zhang.ge

命令参数说明:

参数1:db,设置备份类型为数据库

参数2:domain 网站域名,如zhang.ge,用于备份文件命名

参数3:dbname  要备份的数据库名次,如zhangge_db

参数4:mysqluser  mysql用户名,如不清楚可用mysql 的root帐号

参数5:mysqlpassword  mysql密码

参数6:back_path  备份文件存放路径

⑤ 备份网站文件:

命令行示例:

./backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com

命令参数说明:

参数1:file,设置备份类型为网站文件

参数2:domain 网站域名,如zgboke.com,同样用于备份文件的命名

参数3:site_path 网站文件的路径,如/home/wwwroot/zgboke.com

参数4:back_path 备份文件存放路径

Tips:为了方便里边的七牛同步,建议将备份文件存放上同六个多多上级目录,而且 以网站域名来命名当前目录,比如,同六个多多vps的备份数据,我都放上/home/wwwbackup/,而且 以人及的网站域名来命名,zhang.ge的数据库和文件我都统一存放上/home/wwwbackup/zhang.ge。

最新补充:2014/10/25日,手动执行命令检查时,发现报如下错误信息:

Access denied for user ‘dbuser’@’localhost’ to database ‘db’ when using LOCK TABLES

即提示该用户不具备锁表权限,意味数据导出失败!这名 状况一般居于在数据库正在执行某个查询动作,此时普通帐号是无法导出备份的!

处置辦法 :

辦法 ①、修改里边的备份脚本,找到如下行

mysqldump -u$mysqluser -p$mysqlpd $dbname>$back_path/$domain\_db_$TODAY\.sql

换成–skip-lock-tables参数即可,即不锁表导出(机会丢失许多正在更新的数据,当然深夜刚刚几率很小)。

mysqldump -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql

辦法 ②、使用root帐号执行备份即可:

执行crontab -e 修改Linux计划任务,修改数据库备份计划命令行中的用户名为mysql的root帐号:

./backup.sh db zhang.ge zhangge_db root rootpasswd /home/wwwbackup/zhang.ge

当时人推荐辦法 ②,最大限度的保证了数据备份的完整度!

⑥、建立七天备份的任务计划

I. 先执行crontab -l 看看命令否有居于,若不居于,请使用  yum -y install vixie-cron crontabs 安装crond

II. 确认crond已居于后,请执行/etc/init.d/crond start 确保启动了crond服务,并执行chkconfig crond on设置为开机启动。

III. 执行crontab -e 建立任务计划,如下是我的vps的任务计划,请参考换成:

#backup zgboke.com:
0 3 * * * /root/scripts/backup.sh db zgboke.com zgboke zgboke 123456 /home/wwwbackup/zgboke.com >/dev/null 2>&1
5 3 * * * /root/scripts/backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com >/dev/null 2>&1
#backup zhang.ge:
10 3 * * * /root/scripts/backup.sh db zhang.ge zhangge zhangge 123456 /home/wwwbackup/zhang.ge >/dev/null 2>&1
15 3 * * * /root/scripts/backup.sh file zhang.ge /home/wwwroot/zhang.ge /home/wwwbackup/zhang.ge >/dev/null 2>&1

每个网站2行,第一行备份数据库,第二行备份网站文件。

crontab参数格式为 {分 时 日 月 周 + 命令行}

许多许多,拿第2行来说,就是 每天的深夜3点,执行里边的命令行,最后的>/dev/null 2>&1 表示屏蔽任何日志信息。

注意事项:脚本可不可以都可不可以 写绝对路径,比如/root/scripts/backup.sh 而且 要有执行权限,可不可以再次执行chmod +x 来赋权

作完以上步骤刚刚,你的VPS机会实现了本地七天循环备份机制。下面说下同步至七牛的辦法 。

四、七牛远程备份

远程备份至七牛的原理,在刚刚的博文机会说明,不清楚的请参考:https://zhang.ge/4221.html

下面说具体做法:

①、下载我采集好的七牛同步工具包(仅提供64位):

wget http://static.zhang.ge/diy_tools/QN_Backup_tools.zip

备用下载:

②、将工具包解压:

unzip QN_Backup_tools.zip

解压完成后,会得到六个多多tools文件夹,里边六个多多文件,分别为:

qrsync:七牛同步工具仅适合Linux64位,许多版本请点此下载相应版本替换此文件

qrsync.conf :通用配置模版

config.sh:配置初始化辅助脚本

③、配置qrsync和计划任务

I. 会用vim 和crontab -e 的童鞋 可不可以无视config.sh,直接使用vim编辑qrsync.conf:
{"src":"/home/wwwbackup","dest":"qiniu:access_key=Your AK&secret_key=Your SK&bucket=bucket_name&threshold=511150","deletable":0,"debug_level":1}

修改代码中的 /home/wwwbackup 、Your AK 、Your SK、bucket_name六个多多参数即可。

/home/wwwbackup 表示要同步到七牛的目录,即上文七天备份的文件存放路径

Your AK:你的七牛帐号Access_key

your SK:你的七牛帐号的Secret_key

bucket_name:准备存放备份文件的七牛私人空间名字

改刚刚,执行crontab -e 换成如下计划任务:

#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &

Ps:代码表示每天深夜4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径。

II. 太熟悉vim和crontab的同学,可如下执行我写好的初始化脚本:config.sh
[[email protected]_Server tools]# sh config.sh
Please input the access_key:   输入七牛access_key密钥
Please input the secret_key:   输入七牛secret_key密钥
Please input the bucket name:  输入七牛私人空间名称
Please input the backup path:  输入本地七天循环备份存放路径,比如/home/wwwbackup
#回车后将结速初始化配置,冒出如下例如信息则成功:
echo =========================The crontab list===============================
...
...
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
echo =========================The crontab list===============================
configure Success!

完成以上所有步骤刚刚,你的vps就实现了本地七天循环备份和七牛远程备份了!

五、附加说明

①、注意事项

I. 考虑到脚本适用性,压缩后该含高文件的绝对路径,而解压时也将恢复原本 的绝对路径。

比如,解压zhang.ge_7.zip,所有文件将带上备份前的路径:/home/wwwroot/zhang.ge/

看得懂脚本、又愿意 带路径压缩的同学,可不可以自行修改下,让脚本只压缩网站目录。

比如,将脚本第29行修改如下即可实现:

cd $site_path && cd ..
zip --version >/dev/null && zip -9r $back_path/$domain\_$TODAY\.zip $domain

注意网站目录名可不可以都可不可以 和输入的domain一致!看不懂脚本的,不建议修改,带了绝对路径就是 影响后期手动恢复!

II. 备份文件会含高脚本执行者的权限,比如备份脚本是以root身份执行,那末这名 压缩包解压后的文件的所有者和权限完整后该root,那末在恢复网站数据时,可不可以都可不可以 使用chmod恢复权限到当前的web使用者,比如lnmp一件安装的环境,web的使用者是www,那末解压缩备份文件后,记得执行:chown -R www:www /网站路径  恢复所有者权限,而且 打开网站机会冒出空白页!

②、贴上我的vps计划任务截图,供参考:

③、本地备份截图:

Ps:文件中的数据表示星期几,带db的表示数据库,没带的表示网站文件,每个网站最终将有14份文件(7个数据库备份,7个网站文件备份)。

④、七牛备份截图:

和本地数据保持一致,七牛同步工具还六个多多多优点,通过哈希值判断文件否有有更新,而不重复同步相同文件,许多许多每天的七牛同步我我其实只会同步当天生成的备份包。

六、展望

本文到此就要告一段落了,仔细想想可不可以发现,还是居于一定的改善空间。

比如,还可不可以换成网站恢复机制。同步许多帐号等配置数据到七牛,当vps完整奔溃,数据无法找回时,可直接通过脚本等工具从七牛下载数据,而且 按照写好的配置数据,自动将数据恢复到指定日期。完整我那末多 那末来越多的人工干预。想想都我其实很强大,是不?

机会有一套全自动恢复机制,不但可不可以在vps完整奔溃时快速恢复,还可不可以用于全自动网站搬家,有那末感觉像最近推出的的多备份服务?

我我其实,要实现也非常简单,多写六个多多脚本就可不可以实现,就是 考虑到实用性、环境兼容性等因素,暂时就不花精力去实现了。

2016年12月16日更新:博客目前已分享阿里云主机从内网备份到OSS方案【点此前往】。