云服务器备份别只留快照:rsync + crontab 做一份能恢复的异地副本
很多云服务器只开着自动快照就以为备份做完了。快照恢复整盘确实方便,但它有个短板:快照和云盘在同一个账号、同一个地域里。账号出问题、地域级故障,或者误删后过了快照保留期,数据就真的没了。我的做法是快照照常开,再加一份异地文件级备份,成本很低,恢复时也更灵活。
第一步,定备份范围。整盘复制没必要,也费时间。只备份不可再生的东西:网站数据目录、数据库导出文件、Nginx 和应用的配置文件、用户的上传文件。系统文件、日志、缓存目录一律排除,写一份排除清单单独保存,换机器时照着清单恢复就行。
第二步,用 rsync 做增量同步。第一次全量复制比较慢,之后每天只传改动的部分,1GB 的小内存机器也跑得动。命令里加上 --delete 要格外小心,最好先加 --dry-run 看一遍将要删除的文件,确认无误再去掉 dry-run 真正执行。备份目标可以是另一台便宜的云服务器,或者对象存储挂载的目录,关键是和源站在不同的地域。
第三步,数据库先导出再备份。直接复制正在运行的数据库文件,拷出来的很可能是不完整的。正确顺序是先用 mysqldump 或 pg_dump 导出成 SQL 文件,压缩后放进备份目录,再由 rsync 一起同步。导出脚本里记得把密码放在权限 600 的配置文件里,别写在 crontab 命令行上。
第四步,交给 crontab 每天凌晨跑一次。凌晨业务量小,备份对服务的影响也最小。脚本最后加一行,把本次备份的开始时间、传了多少文件、有没有报错写进日志文件。只看“任务跑完了”不够,要看日志里有没有 error,有一次我就是靠日志发现目标盘满了,备份连续三天传了个空。
第五步,定期做一次恢复演练。备份最怕的是“以为有备份”。每隔一两个月,找一台测试机,把备份目录拉下来,照着恢复步骤把服务跑起来一次,确认网站能打开、数据库能查到最新数据。演练花不了半小时,但能发现备份脚本里早就埋下的问题。
快照管整盘恢复,异地文件备份管数据兜底,两者各司其职。备份的价值不在备份那一刻,而在真要恢复的那天能拿得出来。
- 点赞
- 收藏
- 关注作者
评论(0)