关于dm任务同步相关问题

mysql-instances:
  - 
    source-id: "mysql-replica-02"
    route-rules: ["store-route-rule"]
    filter-rules: ["store-filter-rule", "sale-filter-rule"]
    block-allow-list: "bw-rule-1"
    mydumper-config-name: "global"
    loader-config-name: "global"
    syncer-config-name: "global"

  - 
    source-id: "mysql-replica-05"
    route-rules: ["store-route-rule"]
    filter-rules: ["store-filter-rule", "sale-filter-rule"]
    block-allow-list: "bw-rule-1"
    mydumper-config-name: "global"
    loader-config-name: "global"
    syncer-config-name: "global"

filters:
  sale-filter-rule:
    schema-pattern: "db0*"
    table-pattern: "t_*"
    events: ["truncate table", "drop table"]
    action: Ignore
  store-filter-rule:
    schema-pattern: "db0*"
    events: ["drop database"]
    action: Ignore

block-allow-list:
  bw-rule-1:
    do-dbs: ["db01","db02"]
    do-tables:
    - db-name: "~.*"
      tbl-name: "~(table01|table02)"
    ignore-tables:
    - db-name: "~.*"
      tbl-name: "table03"
  bw-rule-2:
    ignore-tables:
    - db-name: "~.*"
      tbl-name: "~(table04|table05)"

问题1、bw-rule-2定义完后,写在哪里,是 block-allow-list: [“bw-rule-1”, “bw-rule-2”] 这样写入呢?还是…?
问题2、bw-rule-1里有do-tables和ignore-tables,是不是有do-tables,ignore-tables就不生效?
问题3、多张表是不是 tbl-name: “~(table04|table05)” 这样写,确定这样写没有问题?
问题4、~ 和 ^ 正则代表什么?

大神们回答一下,谢谢!!!

block-allow-list 记得不支持数组[xx,xx],一个任务只能配置一个过滤规则

1 个赞

你好。建议看下下面相关文档:

  1. 关于多个“黑白名单过滤规则”的使用,这里有示例,可以参考并测试下,见 https://docs.pingcap.com/zh/tidb/stable/dm-task-configuration-guide#其他配置。
  2. 关于“黑白名单过滤规则”的原理,请参考 https://docs.pingcap.com/zh/tidb/stable/dm-key-features#过滤规则。
  3. 多张表,有通配符写法、正则表达式写法,具体建议阅读下 https://docs.pingcap.com/zh/tidb/stable/dm-key-features 官方文档。如果使用正则,可以参考 https://golang.org/pkg/regexp/syntax/#hdr-syntax。
  4. ~ 在这里表示规则是正则表达式,^ 是正则表达式元字符——锚定行首,具体见 3 中的 go 正则语法链接。

希望对你有所帮助。

1 个赞

https://golang.org/pkg/regexp/syntax/#hdr-syntax
这个网址需要翻墙吗?访问不了。我就想问下我那样写对不对

我这边访问可以直接打开,如果你那边打不开,可以百度搜索下 Go 正则表达式相关内容,也是一样的。

关于 tbl-name: "~(table04|table05)" 的写法,你需要自己测试下,我没有实际这么写过。如果要实现匹配“table04 或 table05”,可以使用 tbl-name: "table0[4-5]" 这种通配符写法;如果表名没有“通配”规律,可以多次使用 db-nametbl-name 的组合实现,示例如下图。
%E5%9B%BE%E7%89%87

1 个赞
  1. 每个 instance 只支持一个 balist rule,在 mysql-instances 里可以为每个 mysql instance 配置你所需要的 rule(e.g. block-allow-list: “ba-rule-2”)。
  2. 对的。当 do-dbs 和 do-tables 存在时,ignore-dbs 和 ignore-tables 不生效。
  3. 这种情况下可以用:“table*” 或者 “~table0[0-9]”,更加清晰一点:thinking:通配符写法在这种情况下更加简洁。
  4. 只有当规则字符串开头为 “~” 时,该规则被识别为正则表达式,且 “~” 会被忽略,不计入正则表达式内。
1 个赞

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。