DM同步,发生唯一键冲突后,如何优雅的处理?

版本:1.0.6
拓扑:多源MySQL 汇聚同步到 TiDB
问题描述:

对于自增ID,目标端的TiDB去掉了PrimaryKey规避冲突;
但是业务场景里,希望保留唯一约束, 发生冲突之后给出报警,并且修复同步异常。

在测试过程中,发现部分情况,可以通过query-error来查询异常情况,判断后做sql-skip操作。

有些情况,query-error只显示基本状态,比如”Paused“, 需要通过query-status来查看错误详情,但是这里并没有友好的可以直接 sql-skip的点位。

请问这种情况,我应该如何优雅的处理?

好像这种情况,出现在了Load阶段,我应该去处理解决冲突数据

:+1:,如果在 Loader 阶段出现了唯一键冲突,建议先检查上游数据是否出现了冲突。

又遇到了新问题,源端处理掉了冲突数据,重启该worker的task,发现不会重新dumper。

于是我删除了dumper相关的目录…现在如论如何都不会自动生成了

[2020/08/21 18:18:52.643 +08:00] [ERROR] [subtask.go:285] [“unit process error”] [subtask=test] [unit=Load] [“error information”="{“msg”:“parse mydumper metadata error: open dumped_data.test/metadata: no such file or directory”,“error”:{“ErrCode”:11001,“ErrClass”:2,“ErrScope”:3,“ErrLevel”:3,“Message”:“parse mydumper metadata error: open dumped_data.test/metadata: no such file or directory”}}"]

1、如果是处在了 loader 阶段,那么这个阶段理论上是不会回退到 mydumper 阶段的。

2、如果是需要重置 task 的同步任务,重新进行数据的全量+增量同步,那么可以参照下面的文档进行操作:

https://docs.pingcap.com/zh/tidb-data-migration/stable/faq#relay-log-无异常时重置同步任务

感谢回复, 大概了解了, 可能不太熟悉。:grimacing:

:handshake: