利用dropbox自动化备份mysql+wordpress

本文前提:你已经拥有shadowsocks翻墙工具,其次你的vps是墙外(GFW)节点。

首先,dropbox是外国的免费云盘,利用google帐号登录既可,网址:https://www.dropbox.com,需要下载安装客户端。

通常来说,你是无法登录和连接dropbox的,因为GFW进行了DNS和HTTP的双层管制,因此我们必须借助shadowsocks避开HTTP管制,借助dnscrypt避开DNS管制。

首先呢,MAC用户需要保证已经安装了工具brew,它是类似于yum/apt-get的包管理器,这可以访问http://brew.sh/index_zh-cn.html完成下载和安装。

其次,利用brew安装DNSCrypt工具(地址:https://dnscrypt.org/),它在本机启动dnsproxy进程,可以拦截本机53端口的DNS明文请求,通过SSL/TSL加密后转发给墙外(GFW)的opendns开放DNS服务获取真实安全的IP。

不过,我是安装的GUI版本的dnscrypt,地址:https://github.com/alterstep/dnscrypt-osxclient,因此你可以跳过brew的安装。

需要注意,dnscrypt对dns解析速度有较大影响,因为它连接的都是欧美的服务器,因此通常在不使用dropbox期间可以选择关闭它。

检查清单

我在安装dropbox和dnscrypt过程中,折腾了10分钟才最终连接上去,总结下来有这么几个检查点供大家自查:

  1. dropbox安装后需要挂接到shadowsocks代理上,默认shadowsocks只会修改chrome/safari的代理配置,因此我们需要点击dropbox小图标里的首选项,配置代理如下(照抄既可):qq20161104-02x
  2. 找到工具栏里的dnscrypt小图标,点击enable Dnscrypt开启DNS代理。
  3. 确保你的shadowsocks正常运行,自动代理模式既可。
  4. 如果dropbox仍旧无法登录,那么找到dropbox小图标退出,重新启动它即可进入帐号输入界面,不出意外你将完成登录。

折腾完成后,dropbox小图标里显示正常同步,在finder左侧可以看到一个挂载的dropbox网盘。

自动上传dropbox

我的目的是备份vps上的wordpress代码以及mysql数据库,所以我需要利用dropbox提供的编程SDK来实现上传功能。

我的vps安装的是centos7.0系统,dropbox的官方开发文档在这里:https://www.dropbox.com/developers,我将采用最熟悉的python SDK来实现,并利用linux crontab定时上传备份到dropbox。

让人庆幸的是,dropbox的python SDK提供了一个完整可用的demo来实现文件上传dropbox,简直不能更省心了,地址:https://github.com/dropbox/dropbox-sdk-python

  • 首先登录我的vps,确保你安装了python 2.7+的版本,我这里是python 2.7.5。(全局类工具最好root安装)
  • 安装dropbox SDK
  • 申请dropbox开发token:https://www.dropbox.com/developers/apps,点击create app创建一个app,然后下方有一个generate按钮可以生成一个Token,它用于为我们后续的备份脚本做认证用途。
  • 拷贝example中backup-and-restore-example.py到本机 ,将token填到TOKEN位置,BACKUPPATH是dropbox上的文件备份路径,LOCALFILE是本机要上传的文件路径;另外,注释掉文件下方的2个多余逻辑:
  • 现在python backup-and-restore-example.py 运行脚本,可以看到命令行成功打印done:

    与此同时,MAC上方的dropbox小图标提示有新的文件上传,大功告成。

定时备份

因为我要上传mysql和wordpress两个压缩文件,因此呢我还需要对之前的backup.py脚本稍作改造,让它从命令行读取要上传的文件名称。

这样,我就可以通过shell实现2个压缩文件的打包->上传工作了,脚本这样稍作改造既可:

然后编写一个shell脚本,先把我的wordpress上传上去再研究mysql好了,整个脚本和目录结构如下:

在任意目录运行sh backup.sh,就可以完成wordpress打包压缩+上传啦~~~~ :mrgreen:  :mrgreen:

现在,执行crontab -e,添加一个每天凌晨00:05分执行的定时任务,让它运行这个脚本既可:

Mysql怎么备份

官方的Mysqldump是能支持在线热备的(不停读/写),但是在数据量较大情况下性能堪忧,因此更多的会使用免费的Xtrabackup来取代。

安装方法:

使用方法(一次性全量备份,我的wordpress数据库太小了):

这样备份数据将进入mysqldump目录,这条命令需要访问mysql的一些文件,因此我用root才能正常执行。

现在,我将mysql备份命令加到之前的backup.sh脚本中:

因为需要root用户执行mysql备份的原因,我干脆将之前work用户的crontab配置到root用户下好了。

其实vps平台也提供了虚拟机镜像备份服务:1美金/月,通过这么几步就可以省下8块钱,还能顺便了解点东西算是超值了!

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~