同步任务日志只有一行 ERROR batch insert failed。5 万行里坏了两万行,运维不知道是哪两万,只能整批重跑。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,批量写入把异常统一 catch 成一条日志,没有记录主键和原始值。逐行重试又太慢,索性整批放弃。失败数据没有落地,问题只能靠猜。重跑一次失败,判断依据还是那行日志。

「同步失败明细缺失」这类改动最怕改一半,回滚脚本先准备好,再动生产。改完顺手把文档补一句,省得下次自己重新推一遍。

INSERT INTO sync_dead_letter (batch_id, pk_id, err_code, raw_json, created_at)
VALUES (?, ?, ?, ?, NOW());

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,捕获异常后逐行重试 把失败行和错误码写到死信表;日志里带上批次号和主键范围;死信表按天分区 方便按批查;修完数据从死信表回放 不用整批重来。

最后用这个标准收尾,下一次失败时死信表能查到具体哪几行 回放后全部入库。

作者 9823189