备份与恢复演练
备份只有在恢复演练过才算可用。演练前先定义两个指标:RPO 表示可接受丢多少数据,RTO 表示可接受停多久;演练时在隔离环境执行真实恢复,校验数据并记录耗时。要覆盖全量恢复与部分恢复(单库、单集合、单索引)两类场景,这些细节在真实事故里往往才是决定性的。
演练步骤示例(MongoDB)
演练步骤示例(MongoDB)
# 1) 恢复到一个隔离实例并改名命名空间,避免覆盖线上
mongorestore --uri="mongodb://127.0.0.1:27018" \
--nsFrom="app.*" --nsTo="verify.*" /backup/mongo-20261012
# 2) 行数与关键聚合比对(线上 vs 恢复实例)
mongosh "mongodb://127.0.0.1:27018/verify" --eval \
"db.orders.countDocuments(); db.orders.aggregate([{ \$group: { _id: null, total: { \$sum: \$amount } } }])"
# 3) 记录恢复开始与结束时间,算出实际 RTO
# 4) 抽查索引是否存在,索引缺失会让恢复后的查询性能完全不同基本信息
| 记录项 | 恢复开始与结束时间、数据量、校验结果、发现的问题与修复动作 |
|---|---|
| 频率 | 按数据重要度安排(季度或月度),版本升级与大变更前加做一次 |
| 覆盖场景 | 全量恢复、时间点恢复、单集合与单索引恢复、跨版本恢复 |
| 环境要求 | 隔离实例与独立存储路径,禁止在线上实例原地覆盖 |
| 验收标准 | 数据条数与关键聚合一致、索引齐备、恢复耗时满足 RTO |
典型使用场景
- 季度容灾演练:验证备份可用性与切换流程
- 版本升级前:确认新版本仍能完成恢复,避免升级后才发现不兼容
- 数据结构大改前:留一份可对照的基线与恢复脚本
- 误删应急准备:练习按单集合或单文档粒度恢复
- RTO 校准:把实测耗时反馈给业务方,修正停机窗口预期
演练步骤与判定
| 步骤 | 操作 | 通过标准 |
|---|---|---|
| 准备 | 准备隔离实例与备份数据 | 环境与线上同版本、存储充足 |
| 恢复 | 执行恢复命令并计时 | 命令成功且耗时在 RTO 之内 |
| 校验 | 比对条数与关键聚合、抽查样本 | 差异可解释,抽样一致 |
| 索引 | 确认索引与集合选项 | 与线上定义一致,无缺失 |
| 复盘 | 记录问题并修复脚本 | 问题项有责任人与完成时间 |
演练暴露的问题(脚本失效、权限缺失、耗时超预期)要在平静期修复,而不是在故障当天边处理边发现。
恢复演练切勿直接对接生产实例或覆盖线上命名空间:恢复是写操作,缺少隔离会带来真实的二次故障。