为什么迁移完成不等于数据一致
迁移工具报告成功,只说明它没有遇到致命错误,不代表每个文件、每一行数据都完整到达目标端。传输中断后重试、权限不足被跳过、文件名特殊字符被忽略、数据库大字段截断,都会留下无声的缺口。因此验收必须有一轮独立于迁移工具的对账。
对账的两个层次
文件层用清单比对:路径、大小、校验和三者组合能覆盖绝大多数遗漏与损坏。数据层先比对象数量与行数,再对关键表做抽样记录级比对与校验和聚合。结论必须落到归档文件里,只凭肉眼看过一遍无法支撑验收。
基本信息
| 文件对账 | 路径与大小清单 diff、rsync 校验模式、总量比对 |
|---|---|
| 数据对账 | 对象数量、表行数、抽样记录、关键字段聚合值 |
| 执行窗口 | 放在业务低峰,避免长查询占用 IO 与连接 |
| 产出归档 | 清单文件、比对输出、抽样记录一并存档 |
典型使用场景
- 文件服务器迁移后确认没有遗漏或损坏的目录
- 数据库搬迁后向业务方提供数据一致性证明
- 增量同步期间定期对账,及时发现同步中断
- 交付验收阶段生成对账报告作为材料
- 故障后回滚前的复核,确认需回滚的范围
文件对账
文件对账
# 源端与目标端分别执行,再比对两份清单
cd /data && find . -type f -printf '%s %p\n' | sort > /tmp/list.$(hostname)
diff /tmp/list.src /tmp/list.dst | head -30 # 仅差异行,输出为空即一致
du -sb /data | cut -f1 # 总字节数快速比对增量复核
增量复核
rsync -avn --checksum /data/ /backup/data/ | tail -5 # 演练模式看还差哪些文件
# 输出只剩统计行、没有待传文件列表,说明两端内容一致
md5sum /data/important.tar.gz # 关键文件单独取校验和
# 数据库侧:逐表比对行数后,对关键表做抽样记录比对对账项与判定
| 对账项 | 方法 | 判定标准 |
|---|---|---|
| 文件数量与路径 | 清单 diff | 差异行为空或全部可解释 |
| 文件大小 | 清单含大小字段 | 无差异 |
| 文件内容 | 校验和或 rsync 校验模式 | 无待传文件 |
| 数据库对象 | 按类型统计数量 | 与源库一致 |
| 表行数 | 逐表计数 | 差异为可解释的业务写入 |
| 关键表内容 | 抽样记录比对 | 抽样全部一致 |
对账输出要留档:清单、比对结果、抽样记录一起归档,既是验收材料,也是后续出现数据疑问时回溯的起点。