DM 跳过DDL不生效

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【遇到的问题:问题现象及影响】

上游是MySQL 5.7,同步报错如下:

配置文件中配置了过滤,试了多种书写方式都不行,重启任务仍然会报错

dm支持修改配置吗?得重建任务吧

配置了不生效

可以暂时用 binlog skip 命令跳过这个 SQL。最好是提供一下 DM 的版本,如果sql-pattern: ["DROP FUNCTION"] 这种写法不生效,怀疑是 DM 解析器出问题了,我过滤 XA 事务时候,就是这么写的,可以正常过滤 XA 事务。

1 个赞

另外你改完配置后,有通过 stop-task, start-task 重建任务让配置生效么?


你这原始 SQL 还带备注啊, 那正则得改个写法了,试下sql-pattern: ["^-- ----.*DROP FUNCTION IF EXISTS"]这种写法。sql-pattern是根据正则表达式来过滤的

1、DM版本是5.4.0,写在上面了 :joy:
image

2、改完配置有stop重启的

3、这么一说好像是这个前缀匹配的问题,刚刚手动跳过了10几个,下次出现再试试

看文档,好像不需要完整匹配

上次又出现了,尝试修改了正则表达式仍然不能跳过。

从报错信息看dm是已经识别到 drop 语句了,第14个字符刚好就是 “FUNCTION” 关键字的结尾

我猜测这里是dm的bug,由于tidb不知道 “FUNCTION”,导致这里报了语句不兼容的问题,所以也无法跳过。

你要不试试升级 DM 呢。本身 DM 版本和 tidb 版本也不是强绑定的。

重建一个配置,对比测试一下是否生效

确实可能是,DM 是直接复用 tidb-server 的语法解析模块,不过记得应该 6.X 某个版本貌似修复了,语法解析失败不会在 DM 处直接出错,而是交到执行阶段由 tidb-server 判断是否能执行成功。 可以在测试环境使用最新的 dm 版本试下,看还会报错么。

好像不是这么写的吧。function要用sql-patterm吧。我有一次也是在 mysql创建了一个函数,结果报错。我只能迁移DM换一台服务器添加过滤参数然后重新从停止点开始同步。
events: [“drop database”,“truncate table”, “drop table”,“delete”,“create index”,“drop index”]
sql-pattern: [“^CREATE\s+DEFINER”,“^DROP\s+EVENT”,“ALTER\s+TABLE[\s\S]*ADD\s+PARTITION”, “ALTER\s+TABLE[\s\S]*DROP\s+PARTITION”,“^DROP\s+PROCEDURE”, “^CREATE\s+PROCEDURE”,“ALTER\s+TABLE[\s\S]*ADD\s+INDEX”]

你的DM是什么版本的?

5.3的