上一篇文章发布了备份网站到七牛的第一版,这次应回复要求先公布同步原理及 shell 源码,让喜欢折腾的人有力可使。其实,这个备份工具的原理非常简单,就是借用了官方的同步工具,配合简单的 shell 语句即可完成。
一、备份原理
简介
qrsync 是一个根据七牛云存储 API 实现的简易命令行辅助上传同步工具,支持断点续上传,增量同步,它可将用户本地的某目录的文件同步到七牛云存储中,同步或上传几百 GB 甚至上 TB 的文件毫无鸭梨。
注意:被同步的文件名和路径必须是 utf8 编码,非 utf8 的文件名和路径将会同步失败
下载
qrsync 命令行辅助同步工具下载地址:
Mac OS: http://devtools.qiniu.io/qiniu-devtools-darwin_amd64-current.tar.gz Linux 64bits: http://devtools.qiniu.io/qiniu-devtools-linux_amd64-current.tar.gz Linux 32bits: http://devtools.qiniu.io/qiniu-devtools-linux_386-current.tar.gz Linux ARMv6: http://devtools.qiniu.io/qiniu-devtools-linux_arm-current.tar.gz Windows 32bits: http://devtools.qiniu.io/qiniu-devtools-windows_386-current.zip Windows 64bits: http://devtools.qiniu.io/qiniu-devtools-windows_amd64-current.zip
用法
先建立一个配置文件(JSON 格式),比如叫 conf.json,内容如下:
{ "src": "/home/your/sync_dir", "dest": "qiniu: access_key=<AccessKey> &secret_key=<SecretKey> &bucket=<Bucket> &key_prefix=<KeyPrefix> &threshold=<Threshold>", "deletable": 0, "debug_level": 1 }
简单说明:
①、src 表示需要同步的本地目录,比如网站文件打包存放路径:/www/web_backup,或是你网站文件路径:/home/domain/zhang.ge/public_html
②、2 个 Key:access_key和secret_key,进入七牛账号设置界面可以获取到。
③、bucket 表示存放备份文件的七牛空间,建议新建一个。
④、key_prefix 表示存放在七牛空间的上一级目录名称,比如key_prefix=backup/ 则表示备份文件将存放到目标空间下的 backup 文件夹中。参数留空则表示存放到改空间的根目录。
⑤、threshold表示文件分块上传的块大小,单位为字节(Byte),可根据你本地的网络带宽来确定。
⑥、deletable 是否同步删除七牛云上的文件,通常设置 0,当本地文件删除时并不删除存储在七牛的对应文件。如果你想删除本地文件的同时也删除存储在存储在七牛的文件,则设置为 1。
Ps:以上即为此工具必备的参数,更多参数请至七牛官方文档查看。
在建立完 conf.json 配置文件后,就可以运行 qrsync 程序进行同步。
Unix/Linux/MacOS 系统可以用如下命令行:
./qrsync /path/of/your-conf.json
Windows 系统用户在 [开始] 菜单栏选择 [运行] 输入 cmd 回车即可打开 DOS 命令行窗口。
假设你的 qrsync.exe 和配置文件都存放在 d:/tools/,则如下执行:
D:\tools\qrsync.exe D:\tools\your-conf.json
需要注意的是,qrsync 是增量同步的,如果你上一次同步成功后修改了部分文件,那么再次运行 qrsync 时只同步新增的和被修改的文件。当然,如果上一次同步过程出错了,也可以重新运行 qrsync 程序继续同步。
以上即为各种系统将文件同步到七牛云存储的原理方法,我们换个想法:当我们同步的是网站打包的文件及数据库,那不就变相的实现了将网站备份到七牛云存储了吗?!
二、第二版工具 shell 源码(未完待续...)
仔细看了备份原理,相信有 shell 基础的朋友很容易就可以制作一个自动备份的工具了。
下面公布下张戈写的第二版工具源码:
相比第一版:
①、增加了数据库和网站文件分离机制,可分开设定各自的备份间隔,比如数据库我需要每天备份一次,而网站文件我打算 7 天备份一次;
②、数据库备份文件先压缩后上传,减小文件体积,节省空间流量。
工具文件结构:
[[email protected] ~]# tree qiniu qiniu |-- backup #本地默认同步目录 |-- conf #配置文件存放目录 |-- main.sh #初始化 shell 脚本 |-- QN_backup.sh #备份及同步 shell 脚本 `-- qrsync 2 directories, 3 files
初始化脚本源码:
[[email protected] ~]#vim main.sh #!/bin/bash #Author:ZhangGe #Des:Backup you website to qiniu CDN. #Date:2014.7.29 #config Em. filepath(){ read -p "Please input the webroot like /domain/zhang.ge/public_html:" filepath if [ -z $filepath ];then echo Nothing input!Please retry.. filepath elif [ ! -d $filepath ];then echo $filepath not found! Press Enter_key retry! filepath fi } access_key(){ read -p "Please input the access_key:" access_key if [ -z $access_key ];then echo Nothing input!Please retry.. access_key fi } secret_key(){ read -p "Please input the secret_key:" secret_key if [ -z $secret_key ];then echo Nothing input!Please retry.. secret_key fi } bucket(){ read -p "Please input the bucket name:" bucket if [ -z $bucket ];then echo Nothing input!Please retry.. bucket fi } mysqluser(){ read -p "Please input the mysql username:" mysqluser if [ -z $mysqluser ];then echo Nothing input!Please retry.. mysqluser fi } mysqlpd(){ read -p "Please input the mysql password:" mysqlpd if [ -z $mysqlpd ];then echo Nothing input!Please retry.. mysqlpd fi } backpath(){ read -p "Please input the backup path:" backpath if [ -z $backpath ];then backpath=`pwd`/backup elif [ ! -d $backpath ];then echo $backpath Not exist!!Please retry.. backpath fi } dbname(){ read -p "Please input the database name:" dbname if [ -z $dbname ];then echo Nothing input!Please retry.. dbname fi } d_time(){ read -p "Please input the db backup rate time(like 1/2/3..30):" d_time if [ -z $d_time ];then d_time=1 fi } w_time(){ read -p "Please input the web backup rate time(like 1/2/3..30):" w_time if [ -z $w_time ];then w_time=7 fi } input(){ clear filepath access_key secret_key bucket mysqluser mysqlpd dbname backpath d_time w_time } input cd $(cd $(dirname $BASH_SOURCE) && pwd) echo \{\"src\":\"$backpath\",\"dest\":\"qiniu:access_key=$access_key\&secret_key=$secret_key\&bucket=$bucket\&key_prefix=backup\/\&threshold=512000\",\"deletable\":0,\"debug_level\":1\}>./conf/qrsync.conf #crontab test -f /var/spool/cron/root && cp -f /var/spool/cron/root /var/spool/cron/root_bak grep -v "QN_backup" /var/spool/cron/root >/var/spool/cron/root echo "#Add by QN_backup Scripts" >>/var/spool/cron/root echo "0 0 */$d_time * * sh `pwd`/QN_backup.sh db $mysqluser $mysqlpd $dbname $backpath" >>/var/spool/cron/root echo "0 0 */$w_time * * sh `pwd`/QN_backup.sh file $filepath $backpath " >>/var/spool/cron/root #reload the crontab /sbin/service crond reload 2>/dev/null echo =========================The crontab list================================= crontab -l echo =========================The crontab list================================= echo compelet! exit 0
备份及同步脚本源码:
[[email protected] ~]#vim QN_backup.sh #!/bin/bash #Author:ZhangGe #Des:Compress file #Date:2014-7-29 TODAY=$(date +%Y-%m-%d) cd $(cd $(dirname $BASH_SOURCE) && pwd) if [ -z $1 ];then echo Please Usage:./QN_backup.sh back_type filepath backpath..and so on exit 1 fi if [ "$1" == "db" ];then mysqluser=$2 mysqlpd=$3 dbname=$4 backpath=$5 if [ ! -z $backpath ];then rm -f $backpath/database_backup* fi mysqldump -u$mysqluser -p$mysqlpd $dbname>$backpath/database_backup_$TODAY\.sql zip --version >/dev/null && zip $backpath/database_backup_$TODAY\.zip $backpath/database_backup_$TODAY\.sql || tar cvzf $backpath/database_backup_$TODAY\.tar.gz $backpath/database_backup_$TODAY\.sql fi if [ "$1" == "file" ];then filepath=$2 backpath=$3 if [ ! -z $backpath ];then rm -f $backpath/website_backup* fi zip --version >/dev/null && zip $backpath/website_backup.$TODAY\.zip $WebRoot || tar cvzf $backpath/website_backup.$TODAY\.tar.gz $WebRoot fi ./qrsync ./conf/qrsync.conf exit 0
Ps:由于七牛最近屏蔽了空间内容查看,导致第二版备份工具未进行测试,所以张戈就不发下载地址了,回头测试无误后再来补充下。
写在最后:从前文可以看出,七牛官方提供的同步工具支持多种系统,比如 Windows,有兴趣的朋友可以参考此文,为 Windows 系统的 VPS 服务器写一个批处理脚本,来实现网站备份!当然,有此需求的朋友也可以留言,并提供 Windows 系统的 VPS 主机,只要有空,张戈可无偿添加此批处理脚本。
用了段时间的VPS,感觉太折腾了,又换回虚拟主机。七牛只听说过,没有用过、
七牛有那么好!
前來支持一下~~博主好厲害哇!
真不错!支持一下
我還沒有用過VPS,還是收好了
七牛缓存更新好慢,其他还好
确实是这样
就是借用了官方的同步工具,配合简单的shell语句即可完成
有意思?
准备弄个玩玩~
不知道博主什么时候可以弄一个rsync自动同步的,要实时同步两台vps的教程,不知道为什么根据网上的教程操作总是失败,总是一堆问题!
请参考:http://www.ttlsa.com/web/let-infotify-rsync-fast/
搞不定:https://zhang.ge/pay.html
qrsync貌似要停用了。update.itxueguan.com,将你的腾讯云和我用了qshell来做到一起了