分类
博客

对于网站自动备份的思考与对策

我对于网站数据的完整性达到了近乎强迫症的地步。个人博客自从2016年11月5日开创以来,经历几度折腾,数据也丢失了不少(主要是图片,目前依然不知道有些图片是如何丢失的),令我极为痛心。

虽然说现在自己使用VPS,对于网站的迁移也达到了较为娴熟的标准化作业,但我依旧十分担心哪一天我的博客、网站的数据再度丢失。

过去的一段时间里,我一直使用DigitalOcean付费提供的VPS备份服务,这个服务让我感到安心,但有着以下几个缺点:

  1. 需要花钱VPS价格的20%。
  2. 只有保存5份备份,这对于一些情况相当不利。比如说,我自己没有察觉到把哪些数据误删了,很长一段时间之后才发现(这也是我前面所述那些图片丢失的情况),那么DigitalOcean的备份服务,便没有办法让我找回这些数据。
  3. DigitalOcean的备份服务,再怎么说也是DigitalOcean自家的,不符合风险分散原则。

于是乎,我便开始研究了如何将我的VPS以更好、更安全的方式进行备份。

我首先想到了将网站上传到GitHub上,我可以写一个.sh的script脚本,很轻易地将数据库文件和网站数据复制到一个路径下,然后进行git add、git commit和git push。再配合crontab,我便可以对我的网站实行每日备份。

但是这个方案也有以下几个缺点:

  1. 我不知道为什么,就算网站没有任何的更新,导出的SQL文件和之前的SQL文件,也会有一些不同。因此,每次备份的时候,都会push新的SQL文件。这让我觉得自己在滥用GitHub给予免费用户的无限空间。
  2. GitHub并不支持大文档上传,超过100MB的文件,都无法正常上传。我目前网站的数据库已经达到了12MB。尽管说离超过100MB还有一定的距离,但是我不喜欢我的终极备份方案有任何的限制。
  3. 在我取消了DigitalOcean的备份方案之后,只备份在GitHub,依然不符合风险分散原则。

于是,我只将网站的内容(我的三个网站都是WordPress,所以是wp-content)传到GitHub上,而不上传数据库文件:

  1. 只有文件更新的时候才有push的发生。而文件更新只有在主题更新、插件更新、或文章上传新图片的时候会发生。
  2. 我依然可以对版本进行回滚,并且可以根据需要取回之前版本的文件。

然后,我用gdrive将我的数据库每日上传到Google Drive,将网站的内容(wp-content)每日检查如果有产生新内容则上传到Google Drive:

  1. 我之前设想的是每月备份一次网站内容。按照目前的情况,每月将会产生1GB的备份档。我目前使用的是100GB的Google Drive套餐,在不删除任何信息的情况下大约可以使用大约八年(我目前其他个人资料占用10GB多一些,主要以Google Photos为主)。估计未来网盘价格会进一步降低。实在不行的话,我可以再设计一些比较复杂的机制,来合理地定时删除部分备份资料,仅保留更长时间间隔的备份(比如说半年、一年)。这是基于GitHub备份存在的情况下,所以一个月一次的备份,我认为是安全的。
  2. 但我后来还是觉得先每日检查然后根据是否有产生新内容再决定是否备份。也许我一个月也不会有新的内容(主要取决于是否有上传新的图片)。
  3. 加上GitHub备份,我的网站备份分散到了两个平台,较为符合风险分散原则。我也会不定期地将备份文件拷贝到我的本地磁盘,这样相当于我的网站在三个地方都存在备份。

做了上述的备份操作后,我的网站数据只有在如下情况下丢失:

  1. DigitalOcean的数据中心出现问题,导致目前存放在DigitalOcean旧金山数据中心的网站数据丢失,并且
  2. GitHub的数据中心出现问题导致我的备份丢失,并且
  3. Google Drive的数据中心出现问题导致我的备份丢失,并且
  4. 我电脑出现了问题,导致存在磁盘上的网站备份丢失

而我认为这是不可能发生的

“对于网站自动备份的思考与对策”上的一条回复

备份已经发威,昨晚折腾的时候不小心把子主题的functions.php给清空了(原因未知)。得益于每日备份,我成功地恢复了functions.php。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注