DM集群任务配置添加filters不生效

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

  • 【TiDB 版本】:v4.0.0-rc
  • 【DM 版本】:v1.0.4-hotfix
  • 【问题描述】:为了过滤上游数据源同步过来的分区表管理DDL,我在task_name.yaml中添加了如下配置:
filters:
  filter-partition-rule:
    schema-pattern: "*"
    sql-pattern: ["ALTER\\s+TABLE[\\s\\S]*ADD\\s+PARTITION", "ALTER\\s+TABLE[\\s\\S]*DROP\\s+PARTITION"]
    action: Ignore

修改完后在dm-ctl中更新了配置

~/dm-ansible/resources/bin/dmctl --master-addr 192.168.100.151:8261
update-task /data_db1/dm/conf/task_name.yaml

然后在上游数据源执行了一条测试DDL后发现依然会报错,信息如下:

麻烦帮忙看看哪个环节出了问题

是否尝试 stop-task 再 start-task,可以试一下重启同步任务。如重启不生效,辛苦提供下完整 task 配置。

stop-task 再 start-task也试过了还是不行
task配置如下:

# 任务名,多个同时运行的任务不能重名。
name: "task_name"
# 全量+增量 (all) 同步模式。
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
  host: "192.168.100.176"
  port: 4000
  user: "root"
  password: "GdO2ZZ0bXthjE23V8SHRZkA7mWbxREfxJe+eCPY="

remove-meta: false


# 黑白名单全局配置,各实例通过配置项名引用。
black-white-list:
  global:
    do-tables:                        # 需要同步的上游表的白名单。
    - db-name: "db1"              # 需要同步的表的库名。
      tbl-name: "~^.*"


filters:
  filter-partition-rule:
    schema-pattern: "*"
    sql-pattern: ["ALTER\\s+TABLE[\\s\\S]*ADD\\s+PARTITION", "ALTER\\s+TABLE[\\s\\S]*DROP\\s+PARTITION"]
    action: Ignore




# 当前数据同步任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-
  # 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。
  source-id: "mysql-replica-db1"
  # 需要同步的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `black-white-list` 的配置。
  black-white-list: "global"
  # Mydumper 的配置项名称,用于引用全局的 Mydumper 配置。
  mydumper-config-name: "global"


# Mydumper 全局配置,各实例通过配置项名引用。
mydumpers:
  global:
    mydumper-path: "./bin/mydumper"   # Mydumper 二进制文件的路径。
    threads: 4
    chunk-filesize: 64
    skip-tz-utc: true
    extra-args: "-B db1 --no-locks"


loaders:                     # loader process unit specific configs, mysql instance can ref one config in it
  global:
    pool-size: 4
    dir: "./dumped_data"


syncers:                     # syncer process unit specific configs, mysql instance can ref one config in it
  global:
    worker-count: 8
    batch: 100
    safe-mode: true

不生效的原因是因为没有在 source-id 下面引用 binlog filter 的过滤规则,可参考 https://github.com/pingcap/dm/blob/0dbc60e9f06fca98990ab151be19ecd35f32fe1f/dm/dm-ansible/conf/task_advanced.yaml.example#L31

确实是漏了这个。。。:sweat_smile:
修改后测试正常了,感谢~

感谢反馈,如果有其他问题,麻烦创建新的帖子了。

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