概述
备份任务成功只说明转储文件写出来了,并不代表能恢复。恢复演练是验证完整链路的唯一方式:存储访问、加密密钥、工具版本、扩展可用性、磁盘空间和耗时。演练还会产出可以在评审中站得住脚的 RTO 数字。
步骤
- 在隔离实例上创建演练库,不要使用生产或预发环境:
createdb -h drill-db.internal -U postgres restore_drill
- 恢复最新备份并计时,关闭属主和 ACL 重映射以避免角色不存在导致失败:
time pg_restore -h drill-db.internal -U postgres -d restore_drill \
--no-owner --no-acl --jobs=4 /backups/latest.dump
- 对比备份清单中的快照,核对关键表的行数与校验和:
SELECT 'orders' AS t, count(*), md5(sum(id)::text) FROM orders;
- 将耗时、结果和问题写入带日期的演练报告,然后删除演练库释放空间。
验证
预期 pg_restore 无致命错误完成,行数与校验和与备份清单一致,索引和约束确实存在,实测耗时与 RTO 目标对比有明确结论。若扩展缺失,应先创建扩展再恢复,并把该步骤写入恢复手册。
注意事项
- 逻辑转储演练不覆盖基于 WAL 的时间点恢复,需要单独演练。
- 演练硬件性能可能与生产不同,实测时间只是估算。
pg_restore可能以警告结束,必须核对数据而不只看退出码。- 每次大版本升级后重新演练,并在同一次变更中更新恢复手册。