Linux 服务器使用 Dropbox 备份数据

这个blog之前一直放在 photonvps 上,结果丫们除了隔三差五宕机、访问速度慢之外,居然还给我来了个硬盘错误,把我的数据全整没了,丫们客户除了给我发了封说明邮件之外啥补偿都没有,你就是给我免一个月的费用我也能顺顺气不是。

所以一怒换到了传说中的高档货 Linode 上了,价格果然很贵,不过速度也确实很快,管理界面也丰富的很,所以说便宜没好货,好货不便宜,这是亘古不变的真理。

其实吧,现在这个blog基本就是半死不活状态,整vps的目的主要是为了翻墙用(妈的,GFW太tm坑人了,搞的我每月花费20美刀啊),不过毕竟ssh、vpn啥的都可以搭建自用,省得天天到处找免费工具。实践证明:时间果然tmd是金钱,想省时间可不就得多花钱了。

之前的wordpress备份主要是用那个备份插件搞的,每天发一封导出的SQL附件到Gmail邮箱,这次准备全都改成 dropbox 来备份。毕竟俺的 dropbox 账号已经有70多G了——好吧,其中的48G是2年期,用的三星手机扩容。

目前网上已经不少文章介绍使用 dropbox 来备份 VPS,有的是定时启动 dropbox 程序来同步,有的是使用那个 github上的脚本调用 dropbox api来上传。后者其实只是进行备份操作,而放弃了“同步”这个优势。但前者也存在一个问题,那就是会把dropbox下已有的内容也同步到VPS上,白白占用空间。所以都不完美。

其实呢,目前 dropbox 官方已经提供了 python 的备份脚本了,用这个来调用 dropbox 进程进行同步很省事,而且最理想的是它可以把那些不需要的目录都排除掉。

既然是vps,估计是没有图形界面的,所以直接命令行安装 dropbox吧,推荐用root来安装,因为我连 /etc 目录都备份了。直接参照官方文档就ok了,然后运行一下命令并根据提示将此vps与dropbox关联。之后下载那个Python脚本(其实就是官方文档里面的那个 CLI script 链接),按自己习惯随便扔到哪个目录下都行(我就放在了 /root/bin 下面)。之后运行 python dropbox.py 就会显示帮助信息:

Dropbox command-line interface

commands:

Note: use dropbox help <command> to view usage for a specific command.

status get current status of the dropboxd
help provide help
puburl get public url of a file in your dropbox
stop stop dropboxd
running return whether dropbox is running
start start dropboxd
filestatus get current sync status of one or more files
ls list directory contents with current sync status
autostart automatically start dropbox at login
exclude ignores/excludes a directory from syncing
lansync enables or disables LAN sync

可以启动、停止 dropbox,重点需要关注的是 exclude 命令——运行 python dropbox.py help exclude 可以查看详细的命令介绍——这个命令可以将不需要同步的文件夹排除出去,使用方式是: python dropbox.py exclude add dir1 dir2 dir3…

尤其需要注意的是,运行上述命令一定要 cd 切换到 Dropbox 目录下(一般是 /root/Dropbox),不像其它命令可以随便在其它位置运行,我就在这被坑了半天。

有了这个脚本就简单多了,随便写个自己的sh脚本将一系列操作组合起来,然后扔到 crontab 下去定时执行就可以了。这些东西就不详述了,比较简单。

我目前的备份策略是:

  • 在 dropbox 里面专门创建个 Linode 目录
  • 通过 dropbox.py 排除其它目录,只保留此目录同步到 VPS
  • 使用ln 建立软连接到此目录,包括内容如下:
    •  /etc
    •  wordpress 以及其它程序所在目录
    •  nginx 配置
  • 定时通过mysqldump导出数据库并压缩到此目录,只保留10天的备份文件
  • 每天晚上启动一次 dropbox,运行30分钟后停止

全都自动化,搞定收工。