dm 进行sql-skip,没有跳过,错误依然存在

1、遇到ddl错误,我进行了update-task 做了忽略 all ddl,但是并没有生效,
2、进行sql-skip 他标识的current pos,然后进行resume-task 显示错误依然在那个pos,
这是什么情况好像完全无效啊

看报错提示跟语法 parse 解析有关,但实际执行的 alter table add … 是 tidb 支持的语法,可能是 alter table 之前的那部分注释 parse 时无法识别导致报错。

可以用 mysqlbinlog 解析报错位置的 binlog,确认 binlog 中记录的 DDL statement,参考 binlog-event-filter 中的 sql-pattern 正则匹配 DDL 跳过报错。

另外请提供下具体的 DM 版本。

DM V1.0.6
感觉是dm的bug,我把错误的parse statement找到了/* ApplicationName=GoLand 2020.1.2 */ alter table dh_game_records add is_settle int default 2 null comment "1:未结算,2:已结算"
我在执行这个的时候,确实报错
而且我的有对ddl做all ddl的忽略啊,为什么还会报错?关于这句的正则怎么写? ^alter 这样子可以?

是在下游 tidb 执行吗,把 comment 后面的两个 \ 去掉再执行呢

sql-pattern 可以试试改成 ["(?i)alter\\s+(?i)table\\s+(?i)dh_game_records"]

我去掉\是可以执行得,目前就是这个binlog同步卡住了,我试试你得sql-pattern

还是报同样的错误,就是跳不过去这个pos,为什么sql-skip指定–binlog-pos也过不去呢,而且我还设置了忽略all ddl

发一下 binlog filter 这段配置看看

目前的报错时 tidb parser 解析报错,这种需要用 binlog filter 过滤掉,对于 tidb parser 解析通过,但是 tidb 执行不兼容的 DDL,可以使用 sql-skip 跳过

我有指定sql-skip,但是他没有成功,我也看了log日志,最后还是回到相同的错误,还是报那个ddl的问题

由于 parse DDL 解析报错,可能无法匹配到 table-pattern,可以修改下 filter 配置,将限制放宽

filter-rule-1:
     schema-pattern: "*"
     sql-pattern: ["(?i)alter\\s+(?i)table\\s+(?i)dh_game_records"]
     action: Ignore

使用此方法可以解决此问题

:handshake:

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