dm 上游出现 tidb 不兼容语句如何跳过

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

  • 【TiDB 版本】:3.0.12+ DM 1.0.4HOTFIX
  • 【问题描述】:目前同步mysql操作是发现更改字符类型导致同步不可用(如timestamp改为datetime),这样一来我基本就得重新数据化数据,我选择了重新初始化了所有的数据并删除了dm_meta库和其他库。

问题: 1 往往在同步过程中,有问题的是一个库或者一个表,有没有方法在现有的同步任务中,怎么重新初始化一张表或者一个库? 步骤怎么样的?

稍等,我看下

你好,

dm 可以一次性跳过 tidb 不支持的语句,方法如下,可以通读下

https://pingcap.com/docs-cn/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements/

就怕跳过之后数据有问题

你好,

使用 sql-skip 只是单此匹配,binlogname 和 pos 都是可以获取到的,正确指定不会出现该问题,如果真的担心可以使用 sync-diff-inspector 检查。

支持场景

  • 场景一:同步过程中,上游执行了 TiDB 不支持的 DDL 语句并同步到了 DM,造成同步任务中断。
    • 如果业务能接受下游 TiDB 不执行该 DDL 语句,则使用 sql-skip 跳过对该 DDL 语句的同步以恢复同步任务。
    • 如果业务能接受下游 TiDB 执行其他 DDL 语句来作为替代,则使用 sql-replace 替代该 DDL 的同步以恢复同步任务。
  • 场景二:同步过程中,预先知道了上游将执行 TiDB 不支持的 DDL 语句,则需要提前处理以避免同步任务中断。
    • 如果业务能接受下游 TiDB 不执行该 DDL 语句,则使用 sql-skip 预设一个跳过该 DDL 语句的操作,当执行到该 DDL 语句时即自动跳过。
    • 如果业务能接受下游 TiDB 执行其他 DDL 语句来作为替代,则使用 sql-replace 预设一个替代该 DDL 语句的操作,当执行到该 DDL 语句时即自动替代。

可以一次性跳过多条语句吗,只看到一次跳过一个binglog pos

使用限制

  • 跳过 / 替代执行操作只适合用于一次性跳过 / 替代执行 下游 TiDB 不支持执行的 SQL 语句 ,其它同步错误请不要使用此方式进行处理。