08 真出故障时靠什么救命: 备份、恢复与高可用基本盘
很多系统表面上“有备份、有主从”,但真正出故障时依然手忙脚乱。原因通常不复杂: 备份只是做了,没有验证;高可用只是搭了,没有边界认知;恢复流程写了,但从来没演练过。数据库领域最值钱的能力之一,就是把“有方案”变成“真能恢复”。
先分清三件事
1. 备份
目标是保住数据。
2. 恢复
目标是把数据和服务恢复到可用状态。
3. 高可用
目标是降低主库故障对业务的中断时间。
这三件事互相关联,但不能混为一谈。高可用不等于能回到正确时间点,备份存在也不等于恢复一定成功。
每个团队都应该先定义两个指标
- RPO: 最多允许丢多少数据
- RTO: 最多允许服务停多久
如果这两个指标没人定义,备份策略、高可用策略、恢复演练就没有统一目标,最后通常会变成“能配多少配多少”,但真正关键的地方反而没配对。
一套更稳的基础策略
对绝大多数业务系统来说,下面这套策略已经是比较稳的基本盘:
- 物理备份负责整库恢复
- WAL 归档负责时间点恢复
- 逻辑备份负责对象级导出和迁移兜底
- 至少一个只读副本承担故障接管或读流量分担
这几样各自解决的问题不同,合在一起才构成完整恢复体系。
为什么很多“有备份”的系统仍然不安全
常见原因包括:
- 只做逻辑导出,不做物理备份
- 只看备份任务成功,不验证恢复结果
- WAL 归档策略写了,但归档链其实不完整
- 备份和数据放在同类故障域
- 没有恢复 runbook,出事时全靠临场发挥
数据库恢复最怕的不是技术难,而是“平时从没认真做过”。
高可用的几个关键边界
1. 主从复制不是万能保险
如果主库误删数据、误执行 DDL、误更新大量记录,错误同样可能被复制出去。高可用提升的是可用性,不是数据时间回退能力。
2. 同步复制不是免费午餐
同步复制能降低数据丢失风险,但也会抬高提交延迟和故障复杂度。是否启用,必须结合 RPO/RTO 和业务特征判断。
3. 延迟副本有独特价值
对抗人为误操作时,延迟副本往往比普通热备更有价值。它不是用来提升性能的,而是用来争取修复窗口。
恢复演练至少要覆盖什么
- 从空机器恢复一套新实例
- 按时间点恢复到指定时刻
- 验证应用是否能重新接入
- 验证关键业务表和关键查询是否正确
- 验证是否存在遗漏文件、错误配置、权限缺失
如果一套方案没有演练过,这套方案最多只能叫“设计”,还不能叫“能力”。
一个实际的判断标准
问团队三个问题:
- 如果主库彻底损坏,多久能恢复
- 如果昨天晚上误删了核心数据,怎么回到误删前
- 如果主机房不可用,切换步骤谁来执行
这三个问题如果回答不清楚,高可用和恢复体系大概率都不算成熟。
真正可靠的 PostgreSQL 体系,不是备份做得多,而是恢复路径清晰、边界明确、演练真实。