关于syncer safe-mode的配置问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0.1
  • 【问题描述】:由于上游数据源切换,导致DM同步中断。从较早时间点的binlog进行回放时需要配置task.yaml 中safe-mode为true,兼容已执行的SQL。但是start-task 几分钟后会继续报错,该配置是否有方式长时间生效
    配置如下:
syncers:                
  global:
    worker-count: 8
    batch: 100
    safe-mode: true

你好,看你这边描述,怀疑 safe-mode 参数没生效,可以在 dm-worker 中启动 task 时会读取参数,可以确认下。
配置 safe-mode 后是永久生效的。

我配置在task.yaml中的,但是重启task没有生效。

请问如何确认是否生效呢

猜测你这边配置 syncers 后,没有在 source-id 下面引用规则,配置可参考下面链接;
如不是该原因导致,麻烦提供 task 完整配置以及 dm-worker.log

https://github.com/pingcap/dm/blob/ff03ee6f6951f570099c19cb84e5497e2822ce21/dm/dm-ansible/conf/task_advanced.yaml.example#L49

确实是这个问题,添加配置后解决

好的,数据追上后,建议把 safe-mode 参数关闭,该参数会对上游 SQL 进行转换,可能会带来同步延迟的问题。建议后续追上后,关闭参数。
该模式的主要特点为将来自上游的 INSERT 改写为 REPLACE ,将 UPDATE 改写为 DELETEREPLACE 后再向下游执行。在启动或恢复增量复制任务的前 5 分钟 TiDB DM 会自动启动 Safe mode,另外也可以在任务配置文件中通过 safe-mode 参数手动开启。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。