上游执行ddl语句,dm同步报错

mysql5.7使用dm同步到Tidb5.1.0,mysql端执行ddl会产生同步报错,一般情况怎样处理?

没看明白,Mysql 报错了? 还是 DM 不能用了?

可以用handle-error来处理,参考官方文档https://docs.pingcap.com/zh/tidb-data-migration/dev/handle-failed-ddl-statements

请详细描述下报错信息。
DDL SQL 在同步时,常见的报错是因为兼容性问题的报错,比如修改了数据类型等,具体情况还需要具体分析。

mysql在执行ddl时,dm报错了。

烦请贴下报错信息呢。使用 dmctl 管理工具查询 task 的详细信息,或者查看对应 worker 日志,都能看到。

这种情况是可能出现的,比如上游mysql缩小字段长度 100 到 50。
这种操作在MySQL上能够通过,但是对于TiDB,目前是不支持这种有损修改的,不妨使用dm命令:

## tiup 部署方式
tiup dmctl --master-addr 172.16.10.71:8261 query-status

应该会查看到具体错误信息。

知道了错误发生在何处,要么放弃这个修改,要么使用dm的跳过ddl来使dm正常运行。
跳过ddl命令参考:https://docs.pingcap.com/zh/tidb-data-migration/stable/handle-failed-ddl-statements

就是添加字段的ddl操作,如何在上游mysql执行?是不是必须通过gh-ost或者pt工具执行?

添加字段一般不会有问题啊,建议你还是先用dmctl命令查看具体错误信息。
然后使用官方文档提供的handle fail相关命令处理。链接在上面都写出来了。

在上游mysql,是怎样添加字段的,才能保证同步到下游tidb,麻烦举个例子。

我这里的环境就正常添加字段就可以了,你的报错是什么,不过有个限制,alter不能一次针对多个字段操作

正常情况下,上游添加字段/或者上游执行 DML 操作,都会通过 DM 同步到下游 TiDB 中。
就你这个 DDL 操作为例:

  • 1.如果现象是同步中断,可能是由于下游 TiDB 不支持 SQL,下游无法执行,导致同步中断。这个还是要具体情况具体分析。参考楼上说的,还是需要拿相关报错和 DDL 操作看下。解决方案基本上就是 handle-error 跳过。具体使用参考上面帖子中提供的官网。

  • 2.如果现象是没有同步到下游 TiDB,这个基本上可以从两个方向排查:一个是检查下是否有同步延迟,导致没有同步到下游;另外一个是检查下 task 同步任务配置中,是否配置了过滤掉 DDL/或者这些表的操作,导致 DDL 没有同步到下游。

你这边如果是问方法,可参考上面的回复。如果是具体问题分析,麻烦还需要提供相关报错和日志。

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