一次灾难恢复后小记
最近做了一次灾难恢复,记下点什么吧。
备份不应仅是 cron + rsync。整个 /var/www 都备份下来,数据库则是 mysqldump 再压缩,每天凌晨 cron 跑rsync。没有备份配置文件,mysql 的用户权限表也没有备份。
在恢复时还有一个需求,就是某些站点已经不再运作,因此也不需要再恢复到服务器上,有一个 archive
即可。另一方面则是,某些站点用户上传的静态文件(图片、Flash)等数据有点多,备份机在公司,通过一条 6M 的宽带将 2G 的东西上传到服务器,花费的时间确实有点久。
fcicq 说过使用 git 做备份,既是增量备份的同时,也进行了版本化,随时可以回溯到过往版本。对于版本化,考虑到的是,假设某个文件出现了错误,而备份机也把错误作了备份,那么恢复的文件也是出错了的。这个问题亦是在使用 rsync 时想到的。而 git 对二进制文件进行版本化的能力,我还是有所保留的。也设想 git & rsync 并用,具体怎么做可能得摸索摸索。
另一个问题是配置文件。一般来说扔 /etc 中就不理会的了,整个文件夹备份似乎也有点多余了,一个考虑中的方案是利用 ln,版本化 + 初始化导入脚本。
对于 mysql 的备份,此前没有对用户权限表进行备份实在不该,假设一个站点建立一个帐号的,恢复时的工作量也是挺可观的。而另一方面,此前我是不会把项目的配置文件和项目源码混合在一个数据仓库中进行版本化的,但现在看来,似乎这样做也有这样的优势。
然后对上海×畅发点牢骚:单硬盘,没 RAID,也没有做备份(备份是宣传的噱头?),提供这样的 VPS 服务实在让人感觉有点悬。申请资金租另一个公司/机房的 VPS 做双机方案好点(至少可用性多点保证,利用 DNSPod 的 API 做个切换脚本)。
这次也有决策的错误,判断磁盘出错的时候居然还使用 fsck,我真是秀逗了。 :-\