目标
证明生产备份能够在恢复目标内还原为可用数据库,并记录实测恢复时间与数据丢失窗口,而不是只确认备份文件存在。
步骤
- 选择一份全量备份和恢复目标时间点,记录备份时间戳及对应的恢复点目标。
- 在独立网络创建隔离实例,规格与生产一致,且生产凭据不可用;确认两个网络互不可达。
- 还原全量备份并重放 WAL 或事务日志到目标时间,记录每个阶段的起止时间:
pg_restore --dbname=postgres --create --clean --if-exists \
--jobs=4 /backups/acme-prod-2026-10-21.dump
psql -d acme_prod_restore -c \
"SELECT count(*) FROM orders WHERE created_at >= '2026-10-20';"
psql -d acme_prod_restore -c \
"SELECT last_value FROM orders_id_seq;"
- 核对大表行数、序列值、约束和扩展,并比较抽样校验和。
- 用只读应用副本连接恢复库,执行登录、查询和报表等主要流程。
- 计算从故障开始到应用可用的时间,与恢复时间目标对比并写入报告。
验证
恢复库报告的目标时间正确;关键表行数和校验和与生产一致;序列值不会导致主键冲突;扩展、角色和权限齐全;只读冒烟测试全部通过;报告中写明实测恢复时间和数据丢失窗口。
回滚
隔离环境中的恢复完全可逆:销毁实例和快照即可,生产不受影响。若在真实事件中执行了就地恢复,回滚依赖恢复前创建并验证过的快照,因此必须先做快照再操作。只有报告导出后才能销毁恢复实例;为节省空间而删除生产备份是不可逆步骤,绝不属于本演练的范围。