数据库备份这事儿,说简单也简单,说复杂能把你整得怀疑人生。我见过太多公司,平时备份跑得挺欢,真到恢复的时候,要么文件损坏,要么备份策略根本没覆盖全,只能对着屏幕干瞪眼。去年有个朋友的公司,凌晨三点数据库挂了,他们翻出备份文件,结果发现只有三个月前的数据是完整的,中间的全是增量备份,恢复出来缺了整整一个月的订单。老板气得差点把机房给拆了。这事让我意识到,备份不是跑个脚本就完事,你得真把它当回事儿,从策略到执行,每个环节都得抠细节。

先说说备份频率。很多人觉得每天做一次全量备份就够了,但现实是,业务量大的公司一天能产生上百万条记录,全量备份得跑好几个小时,还会拖慢数据库性能。我认识一家电商公司,他们搞了个折中方案:凌晨两点做全量备份,白天每半小时做一次增量备份。这样既能保证数据不丢太多,又不会影响日常交易。但问题来了,增量备份的恢复过程特别考验技术,你得按时间顺序把一堆小文件拼起来,错过一个时间点,后面全废。所以关键不是频率高低,而是要有一套清晰的恢复流程,并且定期演练,别等真出事了才翻文档。
备份文件放哪儿也是个大学问。我见过最离谱的操作,是把备份和数据库放在同一台服务器上,硬盘一坏,数据没了,备份也跟着见阎王。稍微讲究点的,会往局域网里丢个 NAS,但 NAS 也会坏,而且网络一波动,备份文件可能只写了一半。真正靠谱的做法是遵循“异地备份”原则,至少准备两个不同地点的存储,一个在本机房,一个在云端或其他城市。有个做金融的朋友,他们在上海和深圳各放了一份备份,每天同步一次。某年上海机房着火,他们直接从深圳恢复,业务中断不到两小时。异地备份成本不低,但比起数据全丢的代价,这点钱算不了什么。
备份策略还得考虑数据类型。不是所有数据都值得同等对待。我有个客户是社交平台,用户聊天记录特别多,三年内的数据占了好几个 TB,但真正有价值的是最近半年活跃用户的记录。他们做了分级:核心交易数据每天全量备份,用户聊天记录只保留最近三个月,更早的压缩后存到冷存储。这样既节省了存储成本,又保证了关键数据的安全。但分级要小心,别把不该删的删了。比如有些行业法规要求数据保留七年,你因为省成本提前删了,被审计发现就是大麻烦。所以备份策略一定要和法务、业务部门反复确认,别自己拍脑袋。
恢复演练是很多人忽略的环节。我敢打赌,大部分公司嘴上说“我们有备份”,但从未真正恢复过。等到灾难降临,才发现备份文件格式不对、恢复脚本报错、权限没配好,一堆幺蛾子。有个做医疗系统的朋友,他们每年搞两次全流程恢复演练:从备份文件拉出来,搭建临时环境,验证数据完整性,再切回生产环境。第一次演练花了整整三天,后来熟练了,半天就能搞定。演练中他们发现很多问题,比如表结构变化后,旧备份恢复出来跟新应用不兼容。每次演练相当于给系统打一剂预防针,宁可折腾几天,也别等到真出事再拍大腿。
备份工具的选择也影响成败。开源工具如 mysqldump、pg_dump 用的人多,但处理大规模数据时性能堪忧,动不动就卡死。商业工具像 Oracle RMAN、Veeam 功能强大但价格贵,小公司用不起。我见过最聪明的做法是混合使用:日常备份用开源脚本,重要节点用商业工具做快照。比如他们用 mysqldump 做每日全量,但每周末用 Veeam 做一次整机快照,万一出大事,能直接回滚到快照点。不过这需要运维人员对两种工具都熟练,不然切换时手忙脚乱,反而容易出错。关键还是要根据业务特点和团队能力,选择最合适的组合,别盲目跟风。
自动化备份看着省心,但坑也不少。我有个朋友公司,用 crontab 定时跑备份脚本,结果某天脚本里一个路径写错了,备份文件全存到了临时目录,系统重启后自动清空,他们整整一周的备份都丢了。更离谱的是,监控脚本报警说备份成功,实际上文件大小是 0 字节,因为磁盘空间满了,写入失败却没报错。所以自动化不能完全放手,你得加一些校验机制,比如备份完成后自动对比文件大小、检查 MD5 值,甚至定期抽检几个文件解压验证。最好再配个人工复核流程,每周看一眼备份日志,别让机器自己糊弄自己。
说说恢复时的心理战。真到恢复那一刻,所有人都紧张,老板催着上线,客户在后台骂娘,技术团队手忙脚乱。这时候最忌讳的是慌不择路,上来就全量恢复。正确做法是先评估损失范围,看看是部分表损坏还是整个库挂了。如果只是某个业务表数据乱了,可以只恢复那张表,别把整个系统都停掉。我见过一个案例,某公司数据库误操作删了用户表,他们居然把整个生产库回滚到前一天,导致当天所有交易记录全没了,损失比误操作还大。恢复时一定要冷静,按事先演练的流程来,别临时起意搞骚操作。备份不是技术问题,而是管理问题,平时多流汗,战时少流血。


