自动备份网站文件和数据库到七牛云存储空间

国内专注于静态文件存储云服务的经常被人提及的就是七牛又拍,又拍云早于七牛出现,实力也不错,但是七牛后来者发展气势很强,在众多的草根站长中用户非常地广,这应该和七牛的免费使用策略有关系。

又拍是一个付费的云存储服务,并没有免费的配额,而七牛免费用户每月可以获得免费存储空间10GB、免费每月下载流量10GB、免费每月PUT/DELETE 10万次请求、免费每月GET 100万次请求,一个小博客用七牛已经足够。

七牛的免费策略受到了非常多的用户欢迎,但同时也导致自身一些发展问题,例如七牛域名的DNS故障、七牛二级域名被误报、七牛存储内容接受检查等等,最近七牛又推出了实名认证,要求用户上传身份证,显然七牛在内容管理这一块今后不得不要收紧了。

就目前来说,七牛云存储在各方面限制不是很多,很多朋友都知道七牛的网站镜像可以自动同步网站图片等静态文件,实现CDN加速,这篇文章将来分享一下如何将七牛云存储打造为了一个备份利器,自动将网站的文件和数据库备份到七牛云存储当中。

有关于搭建个人云存储备份空间的文章还有:

注:有Wordpress需要CDN加速的,可以看这一篇:WordPress图片文件CDN加速方法:七牛云存储和又拍云存储

七牛云存储变身备份利器-自动备份网站文件和数据库到七牛云存储空间

一、QRSBox安装方法

1、还没有七牛云存储账号或者没有使用过七牛云存储的,可以先了解一下:七牛云存储国内免费CDN加速10GB空间10GB月流量多加速节点

2、QRSBox是七牛云存储提供的同步上传客户端工具,可以用于Linux、Mac OS X、Windows等操作系统。 使用QRSBox,可将用户本地某个目录的所有文件同步上传到七牛云存储中,同时监控目录变化,将目录中新增的文件也上传至七牛云存储。

3、先到七牛云存储中创建一个新的空间。

七牛云存储新建一个空间

4、因为我们只是用七牛云存储当作备份的,为了安全起见,可将空间属性设置为私有,别人没有授权就无法访问。

七牛云存储设置为私有

5、执行以下命令就是下载并解压QRSBox:

mkdir freehao123 #新建文件夹
cd freehao123  #进入文件夹
wget http://devtools.qiniu.io/qiniu-devtools-linux_386-current.tar.gz #32位
wget http://devtools.qiniu.io/qiniu-devtools-linux_amd64-current.tar.gz  #64位
tar -zxvf qiniu-devtools-linux_386-current.tar.gz  # 32 解压
tar -zxvf qiniu-devtools-linux_amd64-current.tar.gz #64 解压

七牛云存储下载解压

6、初始化QRSBox,命令格式如下:

./qrsboxcli init <accesskey> <secretkey> <syncdir> <bucket> [<keyprefix>]

七牛云存储保存配置

7、其中 是七牛云存储的密钥文件, 是本地的同步目录,该目录下的文件会随时同步上传值七牛云存储。 是保存同步文件的资源空间名。 是文件前缀,可选。如果设置了该参数,那么上传的文件名前都会加上前缀。这个前缀主要用于在空间中区分不同上传来源的文件。

七牛云存储找到密钥

8、如果你使用的VPS或者虚拟主机有自动打包备份功能,在这里就可以将QRSBox的自动同步目录设置为每天定时打包的目录,这样每天的文件就可以自动同步到七牛云存储当中了。部落之前介绍的AMH、WDCP、YZPanel等VPS控制面板就有这个自动打包备份网站的功能。

二、QRSBox配置与使用

1、初化后就会生成配置文件,保存在root下的qrsbox文件目录中。

七牛云存储查看配置文件

2、QRSBox配置文件打开后,相关说明如下:

七牛云存储配置文件

3、忽略某些文件。QRSBox支持使用 ignore 文件来忽略某些不需要上传的文件,在你同步备份的文件夹中创建.qrsignore(或.qrsignore.txt)文件,qrsync,qrsbox,qrsboxcli可以选择忽略某些文件和文件夹。

4、文件内容为上传文件过程中需要忽略的项目的匹配模式。若某文件名被匹配则忽略该文件,若某目录名被匹配则忽略该目录下所有文件以及子目录。匹配规则如下:

5、首位为/:

6、首位不为/:

7、具体的使用可以查看下图(点击放大):

七牛云存储忽略规则

8、关于通配符。 匹配任意非路径分隔符的符号,如b/.txt匹配b/a.txt,但是不匹配b/c/a.txt; 匹配任意字符,包括路径分割符号,如b/.txt,匹配b/c/a.txt。

9、关于非模式。当匹配模式以!开头时候则该模式为非模式,与非模式匹配的文件就不会被忽略不论是否与其他模式匹配,比如:

10、QRSBox同步的命令为:

./qrsboxcli sync &

11、执行后QRSBox就会自动将同步当中的文件目录中的文件上传到七牛云存储当中。

七牛云存储同步文件

三、Windows上使用QRSBox自动同步备份

1、QRSBox还提供了一个Windows版本的软件,可用于Windows系统上的服务器或者VPS自动同步备份文件,下载:http://devtools.qiniu.io/qiniu-devtools-windows_386-current.zip

2、双击qrsbox.exe,然后填写密钥文件、同步目录和存储空间名称。如下图:

七牛云存储在Windows上使用

3、确定后,只要设定的同步目录中有文件增加,软件就会自动将文件上传到七牛云存储空间中。

七牛云存储上传文件

四、自动同步备份到七牛云存储的shell脚本工具

1、这里有一个张戈博主原创的自动同步备份到七牛云存储的shell脚本工具,通过Linux系统计划任务,将网站文件及数据库备份到七牛的免费云存储空间,工具默认使用zip打包,如果系统未安装zip,将使用tar打包成tar.gz格式。

2、进入VPS系统,执行以下命令下载工具:

cd  && wget http://static.zhangge.net/diy_tools/Backup_to_QiNiu_By_ZhangGe_Ver1.0.sh

3、运行工具,并根据工具提示输入信息:

chmod +x ./Backup_to_QiNiu_By_ZhangGe_Ver1.0.sh && ./Backup_to_QiNiu_By_ZhangGe_Ver1.0.sh

4、过程如下:

[root@jiukeyi ~]# ./Backup_to_QiNiu_By_ZhangGe_Ver1.0.sh
Please input the webroot like /domain/zhangge.net/public_html:输入你网站文件存放路径
Please input the access_key:输入七牛的access_key
Please input the secret_key:输入七牛的secret_key
Please input the bucket name:输入七牛的空间名
Please input the mysql username:输入数据库账号
Please input the mysql password:输入数据库密码
Please input the database name:输入数据库名称
Please input the backup path:输入备份文件的临时存放路径,直接回车将存放在/usr/local/qiniu/backup
Please input the backup rate time(like 1/2/3..30):输入备份间隔,比如输入7表示每七天备份一次
#回车后,出现下图信息则为成功:
=========================The crontab list=================================
#Add by QN_Backup Scripts
0 0 */7 * * sh /usr/local/qiniu/QN_backup.sh /www/web/default test2 123456 /www/backup_temp mytest
==================

5、执行完成后,可以复制crontab的命令行,手动执行试试效果:

sh /usr/local/qiniu/QN_backup.sh /www/web/default test2 123456 /www/backup_temp mytest

七牛云存储脚本自动备份

6、备份成功后,七牛对应的空间将可以看到刚刚备份的文件:

七牛云存储新增加的文件

7、以上过程为初始化,只需执行一次即可,当然重复执行也没关系哈,只是覆盖了设置而已。

8、做完初始化设置之后,如果想改变备份间隔或者备份目标之类的,你可以编辑系统计划任务,来重新定义:

#执行crontab -e,打开计划任务编辑界面 
 crontab -e 
#Add by QN_Backup Scripts 
0 0 */7 * * sh /usr/local/qiniu/QN_backup.sh /www/web/default test2 123456 /www/backup_temp mytest

9、0 0 /7 * 表示执行频率,具体为 分 时 日 月 周,工具默认是定义在【日】这一列,代码中的 */7 表示每7天备份一次;/www/web/default:需要备份的网站文件路径;test2、123456:数据库用户名和密码;/www/backup_temp:备份文件存放地址,每次备份的文件将保留至下一次备份才会被删除,差不多算本地备份了;mytest :数据库名称。当然你也可以仿照第4行,根据实际需要插入多条任务计划。

五、VPS自动保留七天数据备份模式

PS:本部分更新于2014年9月1日,来自张戈博客

1、用上面的代码备份会有一个问题,就是只保留一次备份,假如VPS主机出现问题想要恢复数据,则只能恢复之前的一次,更早以前的数据无法恢复。为了让网站的数据备份得更加安全,我们建议保留近七天的VPS备份数据。

2、一方面七天的备份数据足够我们恢复之用了,另一方面保留太多的备份数据容易导致小硬盘空间容量不足,同时加上七牛云存储远程备份,将本地备份的数据同步到七牛云存储空间上,确保数据万无一失。

3、准备工作:

4、实现VPS自动保留七天备份模式脚本如下(也可以到网盘下载:http://pan.baidu.com/s/1qWlsWwc):

 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
56
57
58
#!/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

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>$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 --version >/dev/null && zip -m $back_path/$domain\_db_$TODAY\.zip $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
        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 --version >/dev/null && zip -9r $back_path/$domain\_$TODAY\.zip $site_path || tar cvzf $back_path/$domain\_$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
        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

5、 将以上代码保存为backup.sh之后,执行chmod +x backup.sh 赋执行权限。执行./backup.sh --help 可获得如下帮助说明:

VPS自动保留七天备份

6、数据库备份的命令类似如下:

./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net

7、 上面的命令说明如下:

8、网站文件打包备份的命令如下:

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

9、 上面的命令说明如下:

10、为了方便后面的七牛同步,建议将备份文件存放到同一个上级目录,然后以网站域名来命名当前目录,比如同一个vps的备份数据,我都放到/home /wwwbackup/,然后以各自的网站域名来命名,zhangge.net的数据库和文件我都统一存放到/home/wwwbackup /zhangge.net。

11、用Linux的定时任务实现脚本自动备份。执行crontab -e 建立任务计划,例如:

#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

12、 0 3 * 表示每天的凌晨3点,执行后面的命令行,/root/scripts/backup.sh 是脚本的路径,你需要根据你自己的实际情况修改,后面的备份命令就是上面所说的,最后>/dev/null 2>&1 表示屏蔽任何日志信息。

13、至此,你已经实现了自动将网站的数据库和文件每天定时打包备份到本地文件夹中,并且只保留七天的数据,新备份的数据包会自动替换原来的备份数据包。最后你只需要按照上面的方法使用QRSBox将该文件夹同步到七牛云存储上即可。

六、自动同步备份到七牛云存储通用方法

1、上面已经讲到用QRSBox将我们的自动打包备份的七天数据文件同步到七牛云存储中,这里再提供一个通用的同步本地文件夹到七牛云存储服务器上脚本,原理就是来自官方的QRSBox。

2、下载由张戈博主整理好的七牛同步工具包(注:此七牛同步工具是64位的,如果是其他版本需要自行去官方文档中心下载): http://static.zhangge.net/diy_tools/QN_Backup_tools.zip

3、将工具包解压,解压完成后,会得到一个tools文件夹,里面有三个文件,分别为:qrsync:七牛同步工具;qrsync.conf :通用配置模版;config.sh:配置初始化辅助脚本。

4、配置qrsync和计划任务。会用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=512000","deletable":0,"debug_level":1}

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

6、改完后,执行crontab -e 添加如下计划任务(表示每天凌晨4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径):

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

7、 不熟悉vim和crontab的同学,可如下执行我写好的初始化脚本:config.sh。

    [root@Mars_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!

8、 本地备份截图,文件中的数据表示星期几,带db的表示数据库,没带的表示网站文件,每个网站最终将有14份文件(7个数据库备份,7个网站文件备份)。

七牛云存储本地备份

9、七牛备份截图,和本地数据保持一致。七牛同步工具还有一个优点,通过哈希值判断文件是否有更新,而不重复同步相同文件,所以每天的七牛同步其实只会同步当天生成的备份包。 (点击放大)

七牛云存储远程备份

七、七牛云存储变身备份利器小结

1、使用脚本来备份网站文件和数据库到七牛云存储服务器上,简单方便,适合多数朋友,有兴趣的朋友可以参考源代码自己编辑和修改,以实现更多的功能。

2、QRSBox目前只能实现增量备份,如果文件在原服务器上删除了,是不会同步删除七牛云存储上的备份文件,需要你自己手动删除。

3、./qrsboxcli sync &中的“&”是让同步客户端进程运行在后台。如果退出终端后程序中断,也可尝试使用这个命令:nohup ./qrsboxcli sync >/dev/null 2>&1 &

4、如果希望改变同步的目录、bucket等运行参数,需要先用 stop 命令:./qrsboxcli stop,停止 qrsboxcli 的后台程序,重新用新的参数运行初始化命令,然后再次启动同步程序,qrsboxcli会立刻按新的配置将新目录的文件同步至七牛云存储。