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

  • 时间:
  • 浏览:5
  • 来源:QQ核心乐园_提供QQ业务乐园技术_空间引流吧资讯

博客前些时间分享过一次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 赋执行权限。

为了处置克隆qq好友好友转码问提,下文已打包分享[点此直达]

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=514000","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方案【点此前往】。