十万条数据导到六万多条时进程被重启带走 重跑只能从头开始 一晚上过去还是那六万条 每次都卡在同一个位置。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,进度只存在内存变量里 进程一死就归零 数据本身又没有可比对的自增标记 脚本判断不出哪条已经处理过 只能整个重来一遍。
「批处理断点续跑」这类改动最怕改一半,回滚脚本先准备好,再动生产。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
SELECT batch_no, last_id FROM job_progress WHERE job_name = 'order_import'; UPDATE job_progress SET last_id = 66000, updated_at = NOW() WHERE job_name = 'order_import';
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,把已处理的主键或者批次号落库 每批提交后同步更新;续跑时从进度表读出最大位置 只处理后面的数据;进度更新和业务写入放进同一个事务 避免错位。
最后用这个标准收尾,中断后重跑只处理剩余批次 总条数对得上 没有重复入库的数据。
