切换前最后一轮对账,旧库 214 万行新库 213 万 9997 行,差 3 条,三条都是后台运营手工补录的单。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,双写只加在面向用户的创建接口,运营后台走另一条写入链路,直接写旧库。迁移脚本按时间扫增量,手工补录的时间落在扫描起点之前,也没被捞到。
碰到「迁移双写漏数」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
SELECT id FROM old_order EXCEPT SELECT id FROM new_order;
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,把双写下沉到 DAO 层 所有入口共用同一处写入;扫描范围改成按主键游标 不依赖时间字段;上线前用全量主键比对 差异落清单逐条补;补完再跑一次比对 连续两次为 0 才切换。
最后用这个标准收尾,全量主键比对返回 0 行 两边行数完全相同。
