MENU

利用qshell同步七牛云存储数据到本地服务器

2018 年 03 月 14 日 • 杂乱文章

emmmmmm,水一篇,最近博客这方面折腾的有点多,程序在之前的z-blog转换到了现在的typecho,然而最开始用的还是typecho,折腾了将近两年又特么换回来了,Power By 狗头,Theme By 狗头,博客所使用的环境还是老样子,几乎就是没变,而之前没有启用云存储,全部图片都放到了源站,也没有启CDN,虽然图片很多,但是图片都不是很大,然而,现在看来这样做不行了。

因为启用了主题的卡片式模式以及文章主图,找了大量高质量的图片用来当主图,图片大的有点离谱,所以不能扔到源站了,想继续用云存储来存图片,所以又启用了阿里云OSS,但是布吉岛是为啥子,阿里云OSS启用自定义域名绑定CDN之后图片的加载速度慢的有点离谱,所以去试试用七牛,七牛速度蛮不错的,就决定用这个了,再然后又把之前存到源站的图片也都迁到了七牛,因为我很久之前用阿里云OSS误删过图片,而且删了之后还特么找不回来了,所以决定还是将七牛云存储上的数据定期同步一下到服务器吧,再传到七牛的云存储做一下备份,心里踏实点,图片丢了真的有点蛋疼,下午无聊,试着搞了一下,貌似不是很麻烦,具体步骤如下。

下载命令工具

首先要去下载qshell命令工具,不要和我扯什么SDK,不会,地址
本站服务器为CentOS7.4X64,所以下载的是Linux (64位) ,传到服务器之后改一下名,扔到sbin目录即可。

[root@rj-bai ~]# cd /usr/local/sbin/ && wget https://dn-devtools.qbox.me/2.1.5/qshell-linux-x64 -O qshell && chmod +x qshell
设置秘钥

去七牛,个人中心→密钥管理获取秘钥,获取到之后开始设置秘钥

[root@rj-bai ~]# qshell account ak sk

设置完成完成之后是存在~/.qshell/account.json文件

编写配置文件
[root@rj-bai ~]# vim /backup/qiniu/rsync_qiniu.conf
{
    "dest_dir"   :   "/backup/qiniu/res.rj-bai.com/",
    "bucket"     :   "rj-bai",
    "prefix"     :   "",
    "suffixes"   :   "",
    "cdn_domain" :   "res.rj-bai.com",
    "referer"    :   "blog.rj-bai.com",
    "log_file"   :   "download.log",
    "log_level"  :   "info",
    "log_rotate" :   1,
    "log_stdout" :   false
}
参数说明
参数描述
dest_dir备份路径,全路径
bucket空间名称
prefix只同步指定前缀的文件,默认为空
suffixes只同步指定后缀的文件,要加点,分隔,默认为空
cdn_domain设置下载的CDN域名,默认为空表示从存储源站下载,
referer如果CDN域名配置了域名白名单防盗链,需要指定一个允许访问的referer地址
log_level下载日志输出级别,可选值为debug,info,warn,error,默认info
log_file下载日志的输出文件,如果不指定会输出到qshell工作目录下默认的文件中,文件名可以在终端输出看到
log_rotate下载日志文件的切换周期,单位为天,默认为1天即切换到新的下载日志文件
log_stdout下载日志是否同时输出一份到标准终端,默认为false,主要在调试下载功能时可以指定为true

emmmmmm,详细介绍请看这里撒,我的CDN域名是res,防盗链是*.rj-bai.com,空间名称rj-bai,我要同步所有文件,所以就写成这样,保存退出。

同步测试
[root@rj-bai ~]# qshell qdownload 10 rsync_qiniu.conf
查看全部是否同步到服务器

服务器端文件数量

20180314175457.png

七牛云文件数量

20180314175521.png

建议并发现在数量不要太高,之前在做测试的时候出现过504,现在看来是没啥子问题,现在只是存到本地服务器了,我现在想传到七牛云存储,每天都备份一下,首先要在七牛云新建一个私有空间,开撸。

上传到七牛云存储

还是继续用qshell命令行就可以了,由于文件过大,我要是用分片上传了,栗子。

[root@rj-bai ~]# qshell rput res-backup res.rj-bai.com-2018-03-14-tar.gz /backup/qiniu/res.rj-bai.com-2018-03-14-tar.gz
输出内容
Uploading /backup/qiniu/res.rj-bai.com-2018-03-14-tar.gz => res-backup : res.rj-bai.com-2018-03-14-tar.gz ...
Progress: 100.00%
Put file /backup/qiniu/res.rj-bai.com-2018-03-14-tar.gz => res-backup : res.rj-bai.com-2018-03-14-tar.gz success!
Hash: lo0K0xhsj_u3oUmjeH6W6RGz2K7e
Fsize: 257195450 ( 245.28 MB )
MimeType: application/x-compressed
Last time: 9.51 s, Average Speed: 27039.5 KB/s
参数说明
参数名称描述
Bucket七牛空间名称,可以为公开空间或私有空间
Key文件保存在七牛空间的名称
LocalFile本地文件的路径
Overwrite是否覆盖空间已有文件,默认为false
MimeType指定文件的MimeType
UpHost上传入口地址,默认为空间所在机房的上传加速域名
FileType文件存储类型,默认为0(标准存储) 1为低频存储

详细介绍请看这里撒,我的空间名称res-backup,剩下的全部默认,所以写成酱紫。如果需要上传文件到前缀为2018/03/15/,则需要酱紫,我是打算直接扔到一起了。

[root@rj-bai ~]# qshell rput res-backup 2018/03/15/res.rj-bai.com-2018-03-14-tar.gz /backup/qiniu/res.rj-bai.com-2018-03-15-tar.gz
查看备份文件是否存在

20180315101448.png

这样子就上传过来了,比上传到阿里云OSS简单一些,然后开始编写融合脚本,进行测试。

最终脚本

有个蛋疼的问题,我怕下载有失败的,所以加了个判断,还有就是和之前的没变化就不用传了,省点钱,所以写成了酱紫。

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/openssl/bin:/usr/local/mysql/bin:/usr/local/php/bin

if [ ! -d /backup/qiniu/res.rj-bai.com ]
then 
  mkdir -p /backup/qiniu/res.rj-bai.com
fi

if [ ! -f /usr/local/sbin/qshell ]
then
   cd /usr/local/sbin/ && wget https://dn-devtools.qbox.me/2.1.5/qshell-linux-x64 -O qshell && chmod +x qshell >/dev/null 2>&1
  else
 chmod +x /usr/local/sbin/qshell
fi

if [ ! -f /backup/qiniu/rsync_qiniu.conf ]
then
  cat>>/backup/qiniu/rsync_qiniu.conf<<OEF
{
    "dest_dir"   :   "/backup/qiniu/res.rj-bai.com/",
    "bucket"     :   "rj-bai",
    "prefix"     :   "",
    "suffixes"   :   "",
    "cdn_domain" :   "res.rj-bai.com",
    "referer"    :   "blog.rj-bai.com",
    "log_file"   :   "/backup/qiniu/res.rj-bai.com.log",
    "log_level"  :   "info",
    "log_rotate" :   1,
    "log_stdout" :   false
}
OEF
fi

while true
 do
   if [ `qshell qdownload 5 /backup/qiniu/rsync_qiniu.conf > /dev/null 2>&1 && tail -n 9 /backup/qiniu/res.rj-bai.com.log | grep -i Failure | awk {'print $NF'}` -ne 0 ]
   then
    qshell qdownload 5 /backup/qiniu/rsync_qiniu.conf > /dev/null 2>&1
   else
  break
 fi
done

if [ `tail -n 9 /backup/qiniu/res.rj-bai.com.log | grep -i Success | awk {'print $NF'}` -ne 0 ]
 then
  cd /backup/qiniu/ && tar zcf res.rj-bai.com-`date +%F`-tar.gz res.rj-bai.com
   qshell rput res-backup res.rj-bai.com-`date +%F`-tar.gz /backup/qiniu/res.rj-bai.com-`date +%F`-tar.gz >/dev/null 2>&1
 find /backup/qiniu/ -type f -name "*-tar.gz" -mtime +30 | xargs rm
fi
测试

今天15号,将之前的东西全部删掉,执行脚本即可,最终结果。

服务器文件数量

138.png

云存储文件数量

20180315125813.png

备份文件

20180315125849.png

云存储的文件全量下载一次保存到本地即可,因为他是支持增量同步的,如果不想增量同步,那就在打完包之后把文件夹删了即可。

计划任务

每天凌晨30分开始备份,结束。

[root@rj-bai ~]# crontab -e
30 0 * * * /bin/bash /backup/qiniu/rsync_qiniu.sh >/dev/null 2>&1
最后编辑于: 2018 年 12 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码