dm配置文件中filters模块问题求解

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

  • 【TiDB 版本】:v3.0.3
  • 【问题描述】:dm版本是v1.0.1和v1.0.3

配置文件案例如下

filters:

filter-supported-rule:

schema-pattern: "pd_user"
events: ["create table", "all dml"]
action: Do

filter-unsupported-rule:

schema-pattern: "*"
sql-pattern: ["unsupported-sql"]
action: Ignore

在学习官网university上的视频课程时,看到老师ppt上有 sql-pattern: [{unsupported-sql}] 这个配置项,目的是用以过滤tidb不支持的各种sql。但在官网文档上没找到 unsupported-sql 相关的定义和说明

问题1: 如上案例,dm任务处配置 sql-pattern: [{unsupported-sql}] 就会报错; 配置 sql-pattern: [“unsupported-sql”] 任务不会报错,已正常跑了2天+ 。请问正确的配置是 sql-pattern: [“unsupported-sql”] 吗 ?

问题2: unsupported-sql 规则具体定义是什么呢?会过滤tidb不支持的所有dml和ddl吗,还是只会过滤不支持的所有ddl呢?

问题3: 文档上提到"Ignore"规则的优先级比"Do"高, 如果有多个"Ignore"和多个"Do"规则同时存在,那么优先级顺序是:先顺序匹配Ignore规则,Ignore越靠前(位置在其他规则上方)优先级越高;Ignore匹配完成后,在顺序依次匹配Do规则,实际是这样的吗?

问题4: dm任务忽略所有ddl后,当上游出现ddl变更时,官方推荐的变更流程是什么样的呢? 变更流程: 先暂停dm任务 ,然后在下游tidb上执行ddl变更,之后在上游db上执行ddl变更,最后恢复启动dm任务 ,这么操作是正确的吗,会出现什么问题吗?

谢谢 :pray: 谢谢 :pray: 谢谢 :pray:

1、这里的 unsupported-sql 表示不支持的 sql,具体根据上游的 sql 类型设置,如上游可能执行 DROP PROCEDURE 和 CREATE PROCEDURE 等 TiDB 不支持的 sql,则设置为

sql-pattern: ["^DROP\s+PROCEDURE", “^CREATE\s+PROCEDURE”]

2、sql-pattern 主要用来过滤 TiDB Parser 不支持的语句,包括一些不兼容的 DDL 以及某些特殊语法,如分布式语句 XA START

3、优先匹配 Ignore 规则,多个 Ignore 规则按照 source-id 下面 filter-rules 列表中的顺序依次判断,当同一个表匹配多个规则,会顺序应用这些规则,并遵循 Ignore 优先的原则

4、在任务中配置忽略 DDL,表示上游已经执行过这些 DDL,并接受这些 DDL 都不要同步到下游;如果希望在下游 TiDB 执行或忽略在上游已经执行的某些 DDL 操作,需要配置相应的规则,不建议暂停 DM 同步任务进行手动变更操作。

2赞

好的,谢谢大佬恢复

:ok_hand: