数据库可靠性设计:备份、恢复、容灾与演练

数据库可靠性不只是主从复制,还包括备份可用性、恢复速度、容灾切换、误删回滚和定期演练。

数据库可靠性设计:备份、恢复、容灾与演练

很多系统平时看起来很稳定,直到第一次误删数据、磁盘损坏、主库宕机,才发现备份不可用、恢复太慢、切换流程没人熟。

数据库可靠性设计要回答两个问题:数据最多能丢多少,服务最多能停多久。

Rendering diagram...

RPO 和 RTO

RPO 是 Recovery Point Objective,表示最多能接受丢失多少数据。

RTO 是 Recovery Time Objective,表示最多能接受服务中断多久。

如果业务要求 RPO 接近 0,就需要同步复制、强一致写入或更严格的日志保护。如果业务要求 RTO 很短,就要有自动故障切换和预热好的备库。

主从复制不是备份

复制解决的是高可用和读扩展,不是完整备份。

如果有人在主库误删数据,删除操作也会同步到从库。此时从库并不能天然救你。

备份需要独立保存,并且要能恢复到指定时间点。常见方式包括逻辑备份、物理备份、WAL/binlog 归档和快照。

逻辑备份和物理备份

逻辑备份导出 SQL 或逻辑数据,优点是可读、可迁移,缺点是大库恢复慢。

物理备份复制数据文件,恢复速度通常更快,但和数据库版本、存储结构绑定更紧。

实际系统经常组合使用:定期全量物理备份 + 连续日志归档 + 小表逻辑备份。

时间点恢复

时间点恢复用于处理误删、误更新这类问题。

比如 10:05 有人误执行:

DELETE FROM orders;

如果有 10:00 的全量备份和 10:00 之后的 binlog/WAL,就可以恢复到 10:04:59,再把数据补回生产库。

时间点恢复的关键是日志归档完整、备份可用、恢复流程熟练。

容灾架构

同城多可用区可以抵抗单机房故障。异地容灾可以抵抗城市级故障。

但容灾不是越远越好。距离越远,网络延迟越高,同步复制成本越大。很多系统采用本地强一致、异地异步复制。

容灾切换要提前设计:

  • 谁触发切换。
  • 如何防止双主写入。
  • DNS 或路由如何切。
  • 应用连接如何刷新。
  • 切回流程怎么做。

演练比文档重要

没有演练过的恢复方案,不能算真正存在。

演练要覆盖:

  • 从备份恢复新实例。
  • 恢复到指定时间点。
  • 主库故障切换。
  • 误删数据回补。
  • 备份文件损坏场景。

每次演练都要记录耗时,检查是否满足 RTO 和 RPO。

小结

数据库可靠性不是一句“有主从”就够了。真正可靠的设计包括:

  • 明确 RPO/RTO。
  • 定期备份。
  • 日志归档。
  • 恢复验证。
  • 容灾切换。
  • 误删回滚。
  • 定期演练。

备份没有恢复过,就不能证明它有用。

参考链接