大规模数据迁移如何巡检:分片校验、限流与幂等修复

大规模数据迁移如何巡检:分片校验、限流与幂等修复

大规模数据迁移如何巡检:分片校验、限流与幂等修复

大规模迁移的难点是证明源端和目标端在同一水位可比。按稳定键切片,先比行数、范围和规范化哈希,再对异常切片下钻。

先定义校验口径

在开始前确定:哪个时间点或水位表示“可比”、删除记录如何表达、时区和精度如何统一、字段转换如何处理空值。双写或 CDC 期间还要把延迟纳入判断,不能把尚未追平的数据当作差异。

哈希是筛选器,不是证明

对每个切片同时比较行数、主键范围和规范化后的聚合哈希。哈希不一致时再查具体行;哈希一致也要定期抽样验证校验 SQL 自身没有遗漏字段。表名和字段名不能由外部输入直接拼接,动态对象应先经过白名单校验。

方法适用位置代价与限制
行数与范围快速巡检发现不了内容差异
切片汇总哈希主体校验需要统一排序、类型和空值规则
逐行比对异常切片成本高,应按需执行
抽样持续观察不能替代主体校验

限流与修复分开

校验任务必须能根据源端和目标端负载降速或暂停。修复任务不要与发现任务自动绑定:先记录差异、确认产生原因,再执行幂等修复,并对修复后的切片重新校验。

def should_pause(cpu_percent: float, replication_lag_s: float) -> bool: return cpu_percent > 75 or replication_lag_s > 30

阈值应从服务容量和 SLO 反推,并在配置中注明来源。巡检输出只保留切片编号、汇总结果和必要的脱敏摘要,避免把业务行数据写入日志。