恢复数据校验方法
恢复完成后要用由浅入深的手段判断数据是否真的可用:先看对象是否存在,再比行数,再做抽样校验和,最后按业务口径对账。深度越深成本越高、信心也越强。只做到『文件能解开』或『行数差不多』,会漏掉内容层面的错误,比如误删后用占位数据补齐、金额字段被截断这类问题。
基本信息
| 校验层次 | 结构 → 行数 → 抽样校验和 → 业务口径对账 |
|---|---|
| 基线来源 | 生产快照、上一周期正常值或备份前记录的指标 |
| 常用工具 | psql/mysql 客户端、sha256sum、数据库自带的统计视图 |
| 留痕要求 | 每次校验结果存档,形成可追溯的验证历史 |
典型使用场景
- 恢复演练结束时给出可量化的『恢复成功』结论
- 单表恢复后确认只影响了目标表、其余数据未被改动
- 迁移或升级后比对源库与目标库的关键指标
- 备份巡检:把每日抽样校验和作为趋势指标观察
- 事故复盘:用校验证据证明恢复了多少数据、缺了哪些
分层校验示例
分层校验示例
# 1) 结构:表与索引数量是否符合预期
psql -d appdb -Atc "SELECT count(*) FROM pg_tables WHERE schemaname='public'"
# 2) 行数:关键表与基线对比
psql -d appdb -Atc "SELECT count(*) FROM orders"
# 3) 抽样校验和:对稳定字段做聚合,避免全量扫描
psql -d appdb -Atc "SELECT md5(string_agg(id::text, ',' ORDER BY id)) FROM orders WHERE id % 1000 = 0"
# 4) 业务口径:当日交易总额与流水核对
psql -d appdb -Atc "SELECT sum(amount) FROM orders WHERE created_at::date = CURRENT_DATE - 1"
# 5) 文件级:归档校验和
sha256sum -c backup.sha256方法与适用范围
| 方法 | 成本 | 能发现的问题 |
|---|---|---|
| 对象存在性 | 低 | 表、视图、索引、存储过程缺失 |
| 行数比对 | 低 | 数据大面积缺失或重复导入 |
| 抽样校验和 | 中 | 内容被改动、字段被截断或错位 |
| 业务口径对账 | 高 | 逻辑错误、状态机异常、金额不符 |
抽样校验和用的是稳定字段(主键、时间戳这类不会在正常业务中被改写的列),对频繁更新的字段做聚合会天天不一致,反而失去参考价值。