快捷搜索:   nginx

利用七牛云对象存储+SSH打造网站自动备份功能

七牛云是目前国内最出名的提供免费云对象存储的服务商,其免费用户每月可以使用10GB存储空间(刚注册的第一个月是1G)、每月免费下载流量10GB、每月免费PUT/DELETE 10万次请求、每月免费GET 100万次请求,对我们普通网站来说这个空间用来做备份数据使用已经非常够用。当然七牛云的对象存储还提供网站镜像功能可以自动同步网站图片等静态文件,实现CDN加速。这个就不在今天探讨范围之内。

接下来进入正题,讲讲怎么把七牛云对象存储结合你的VPS或者服务器,自动备份打包你的网站数据并自动上传到七牛云

一、前期准备,注册,开通七牛云对象存储
1、注册使用七牛云
https://portal.qiniu.com/signup
按要求填写好资料,并到邮箱点激活链接,就激活成功,然后登陆,进入后可能需要你认证升级,也就是需要写入身份证号码和使用支付宝进行实名认证,这个按提示进行就行,这个过程比较简单就不详细说明,接下来就是开通空间的过程

2、开通对象存储
点击资源主页,然后在对象存储下面点击立即添加


需要注意如果你没有实名认证是没法使用私有存储的,对我们保持网站备份数据来说私有是比较安全的,因此最好还是使用支付宝授权认证一下

这样就创建成功了。

3、获得需要的参数值
接下来需要获得4个参数,BUCKET名称,测试域名、AK、SK,把这些数值记录下来,下面会用到
AK、SK可以从个人中心-密钥管理中获得,或者直接访问https://portal.qiniu.com/user/key获得
测试域名要进入你创建的对象存储空间后在右侧有,BUCKET名称就是你创建的时候填入的自定义名称,我这里是bnxbbucket


前期准备到这里完成,接下来到你的服务器或者VPS安装同步软件


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

1、下载并解压QRSBox:根据你服务器系统位数选择32位或者64位:
逐条执行以下命令
32位:
mkdir bnxbcom
cd bnxbcom
wget https://devtools.qiniu.io/qiniu-devtools-linux_386-current.tar.gz
tar -zxvf qiniu-devtools-linux_386-current.tar.gz

64位:
mkdir bnxbcom
cd bnxbcom
wget https://devtools.qiniu.io/qiniu-devtools-linux_amd64-current.tar.gz
tar -zxvf qiniu-devtools-linux_amd64-current.tar.gz


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

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


参数说明:其中<AccessKey> 和 <SecretKey> 就是七牛云存储的密钥文件也就是刚刚我们保持下来的AK和SK,<SyncDir> 是本地的同步目录,该目录下的文件有更改就会自动同步上传到七牛云存储。<Bucket> 是保存同步文件的资源空间名就是我上面记录下来的bnxbbucket。<KeyPrefix> 是文件前缀,可选。如果设置了该参数,那么上传的文件名前都会加上前缀。这个前缀主要用于在空间中区分不同上传来源的文件。
如果的VPS或者服务器安装了管理面板,有自动打包备份功能,这里只需要将QRSBox的自动同步目录设置为服务器自动打包文件存放的目录,这样每天的备份文件就可以自动同步到七牛云存储中。如果没有这个功能也没事,下面会提供一个自动打包脚本。



3、配置QRSBox
上一步初始化完其实配置文件就已经自动生成了,如果你有需要更详细的定制参数,那可以修改配置文件,就是下图中的qrsbox.conf这个要根据你安装的路径来查找并编辑



参数说明
tasks字段指定监控任务:
src字段指定受监控的文件目录;
dest字段指定上传目标参数,如空间名()和文件前缀(KeyPrefix),多个参数须以&符号分隔;
skipsym字段指定是否跳过链接文件,0表示不跳过,1表示跳过;
syncdur字段指定监控检测周期,单位为秒,0表示使用默认值(0.5秒)。
access_key字段指定AccessKey值;
secret_key字段指定SecretKey值;
debug_level字段指定日志信息输出等级,默认值为0,即输出Debug信息。
忽略某些文件。QRSBox支持使用 ignore 文件来忽略某些不需要上传的文件,在你同步备份的文件夹中创建.qrsignore(或.qrsignore.txt)文件,qrsync,qrsbox,qrsboxcli可以选择忽略某些文件和文件夹。
文件内容为上传文件过程中需要忽略的项目的匹配模式。若某文件名被匹配则忽略该文件,若某目录名被匹配则忽略该目录下所有文件以及子目录。匹配规则如下:
首位为/:
当首位为/时,只会匹配从上传目录开始的绝对路径
/a.txt 仅仅匹配 a.txt,不会匹配b/a.txt
/*.txt 仅仅匹配 a.txt,b.txt,不会匹配b/a.txt
首位不为/:
当首位不为/时,只要路径中有一部分和模式匹配就可以
b/a.txt 会匹配c/b/a.txt,d/c/b/a.txt等
a.txt 会匹配 a.txt, b/a.txt等所有文件名为a.txt的文件
*.txt 会匹配 a.txt, b/c.txt等所有文件名以.txt为后缀的文件


关于通配符。* 匹配任意非路径分隔符的符号,如b/*.txt匹配b/a.txt,但是不匹配b/c/a.txt;** 匹配任意字符,包括路径分割符号,如b/**.txt,匹配b/c/a.txt。
关于非模式。当匹配模式以!开头时候则该模式为非模式,与非模式匹配的文件就不会被忽略不论是否与其他模式匹配,比如:
当模式存在!1.txt *.txt这两个,将会匹配除了1.txt文件外的所有以.txt结尾的文件;
当要表达首位的!的时候可以用\!来表示,比如想忽略名为 !.txt的文件,匹配模式则为\!.txt。

4、QRSBox同步
命令是:

./qrsboxcli sync &
执行后QRSBox就会自动将同步当中的文件目录中的文件上传到七牛云存储当中。
./qrsboxcli sync &中的“&”是让同步客户端进程运行在后台。如果退出终端后程序中断,也可尝试使用这个命令:nohup ./qrsboxcli sync >/dev/null 2>&1 &
最终保险的做法是加入计划任务执行,最后有说明
运行后QRSBox就会一直在后台运行,如果希望改变同步的目录、bucket等运行参数,需要先用 stop 命令:./qrsboxcli stop,停止 qrsboxcli 的后台程序,重新用新的参数运行初始化命令,然后再次启动同步程序,qrsboxcli会立刻按新的配置将新目录的文件同步至七牛云存储。


三、自动备份脚本及自动上传计划任务
可以实现7天循环备份,也就是自动保留7份最新备份,更早的旧版自动删除
1、实现VPS自动保留七天备份模式
脚本如下:

#!/bin/bash

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 bnxb.com..." && 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 bnxb.com..." && 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 bnxb.com..." && exit 2)
        test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to bnxb.com..." && 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 bnxb.com bnxb_db bnxb 123456 /home/wwwbackup/bnxb.com
        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 bnxb.com /home/wwwroot/bnxb.com /home/wwwbackup/bnxb.com
        echo =====================================End of Hlep==============================================
        exit 0
else
        echo "Error!Please Usage --help to get help infomation!"
        exit 2
fi

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

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

./backup.sh db bnxb.com bnxb_db bnxb 123456 /home/wwwbackup/bnxb.com

上面的命令说明如下:
参数1:db,设置备份类型为数据库
参数2:domain 网站域名,如bnxb.com,用于备份文件命名
参数3:dbname  要备份的数据库名字,如bnxb_db
参数4:mysqluser  mysql用户名,如:bnxb,如不清楚可用mysql 的root帐号
参数5:mysqlpassword  mysql密码
参数6:back_path  备份文件存放路径,如/home/wwwbackup/bnxb.com

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

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

上面的命令说明如下:
参数1:file,设置备份类型为网站文件
参数2:domain 网站域名,如bnxb.com,同样用于备份文件的命名
参数3:site_path 网站文件的路径,如/home/wwwroot/bnxb.com
参数4:back_path 备份文件存放路径

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

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

#backup bnxb.com:
0 3 * * * /root/scripts/backup.sh db bnxb.com bnxb bnxb 123456 /home/wwwbackup/bnxb.com >/dev/null 2>&1
5 3 * * * /root/scripts/backup.sh file bnxb.com /home/wwwroot/bnxb.com /home/wwwbackup/bnxb.com >/dev/null 2>&1

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

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


5、添加自动同步脚本的执行
执行crontab -e 添加如下计划任务(表示每天凌晨4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径,这里演示的是放ROOT下的):

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

您可能还会对下面的文章感兴趣:

最新评论