博客的备份与恢复

周末为博客增加了备份与恢复的功能,以后就不用担心数据丢失了。

有许多 WordPress 插件可以做这件事。起初,我使用了评价和下载量较高的 BackWPup。它可以把源文件和数据库 dump 文件打包成一个压缩文件,并上传到 FTP、Dropbox 等指定的地方。此外,它还支持自动备份。

虽然 BackWPup 把备份做得很出色,但遗憾的是,目前它只支持备份,不支持恢复。若要进行恢复,必须自行下载并解压备份文件,然后手动恢复源文件和数据库。操作非常繁琐。

于是,我打算写个脚本替我做这些繁琐的恢复工作。源文件的恢复很简单,就是简单的文件覆盖;数据库的恢复也不难,数据库的用户名和密码可以从 wp-config.php 文件中找到,这样就能轻松地把数据库 dump 文件导入到数据库中了。

当恢复脚本写完,我发现基于这个脚本,可以很快实现备份功能。因为备份只是把恢复反过来做一遍:首先生成数据库 dump 文件,然后把它和源文件放在一起打包即可。因此,我决定自己写脚本来做备份。这样一来,BackWPup 就没有用武之地了。

当备份脚本写完,又发现了新的问题:每次备份都会产生一个整站的拷贝。拷贝那些没有发生变化的源文件是没有意义的,这样不仅浪费磁盘空间,还不利于记录变更历史。而这些问题,正是版本控制所能解决的。

因此,我决定用 Git 管理源文件和数据库 dump 文件。备份时,先让脚本生成数据库 dump 文件,然后把它和源文件放在一起提交;恢复时,先 checkout 到某个 commit,然后用脚本把数据库 dump 文件导入到数据库中即可。

若想实现自动备份,可以添加一个 cron 定时任务。不过我还是喜欢手动备份,因为这样可以产生更有意义的 commit message。

以上就是目前本站的备份与恢复方案。