湾区日报是如何备份数据库的?

2016/02/22 · 浏览量 4621 · 全部博文

一个稍微严肃一点的项目的数据库都需要定时备份,这点应该大家都同意吧?因为你都得假设世界末日模式:数据中心突然地震火灾、数据库的那台虚拟机突然消失了、黑客入侵把数据库清空等。至少得留一条后路东山再起吧?

湾区日报运营至今 500 多天,才开始备份数据库的。可见我直到最近才比较觉得湾区日报是一个稍微严肃一点的项目:)

秉持着『快糙猛』的原则,咱就不用各种学术派的最佳实践来备份数据库了,简单够用的方法足矣。

湾区日报有两个数据库:PostgreSQL 与 Redis。所有数据都是数字与字符串,全部 dump 出来的话,PostgreSQL 里的数据只有 50 MB(压缩后10几MB),Redis 里的数据只有 5 MB(压缩后不到 1MB)。

大概的思路是:有一个每天自动执行一次的 job 把所有数据 dump 出来,压缩一下,按日期命名,最后上传到某个地方。上传到哪里呢?任何提供API的云存储服务都行(Dropbox、Box之类的)。

对于 PostgreSQL 里的数据,我用 Django 的 dumpdata 命令把所有数据 dump 成一个 json file,然后 gzip 一下。

对于 Redis 里的数据,直接 gzip 一下 disk 上的 dump.rdb

这个定时的 job 已经运行好几天了。我演习了几次恢复数据:把 production 的数据备份导入我开发中用的虚拟机(vagrant + virtualbox),成功恢复。


我读过的好书、 用过的好工具推荐: