同一个source,多个block-allow-list时怎么配置

TIDB/dm:v6.0

#备注: db1,db2,db3在同一个数据库系统,即source-id相同
#问题:list2怎么加入进来?

mysql-instances:

  • source-id: “source-prod-01”

    block-allow-list: “list1” #问题list2怎么加入进来

    route-rules: [“route-rule-1”,“route-rule-2”,“route-rule-3”]

block-allow-list:
list1:
do-dbs: [“db1”]
do-tables:
- db-name: “db1”
tbl-name: “tb1”
list2:
do-dbs: [“db2”,“db3”]
ignore-tables:
- db-name: “db2”
tbl-name: “tb2”
- db-name: “db3”
tbl-name: “tb3”

routes:
route-rule-1:
schema-pattern: “db1”
target-schema: “dball”
route-rule-2:
schema-pattern: “db2”
target-schema: “dball”
route-rule-3:
schema-pattern: “db3”
target-schema: “dball”

分库分表的合并吗?现在应该只支持一个list

目前还不支持。只能合并为一个 list

不光是分库,分表,还有其他的

为啥要分开多个list?

上面案例怎么合并,改了半天,db2,db3过滤外的表没有同步

你可以把你的需求说一下。

db1我只需要其中几个表(不要的多),db2,db3我需要过滤部分表(需要的多),最后都合并到一个数据库

你这个需求可以合并到一个list啊
block-allow-list:
list1:
do-dbs: [“db1”,“db2”,“db3”]
do-tables:

  • db-name: “db1”
    tbl-name: “tb1”
    ignore-tables:
  • db-name: “db2”
    tbl-name: “tb2”

不行,不知道是不是6.0有bug

只同步了db1–tb1, db2,db3没有同步 任何表

楼上对 block-allow-list 的设置有问题的。block-allow-list 规则:

  1. 当 do-dbs 有设置时:
    • 如果表名命中该 do-dbs 列表,开始判断 do-tables(4)
    • 如果表明没有命中 do-dbs 列表,该表不需要被迁移
  2. do-dbs 没有设置且 ignore-dbs 有设置
    • 如果表名命中 ignore-dbs 列表,该表不需要被迁移
    • 如果表名没有命中 ignore-dbs 列表,开始判断 do-tables(4)
  3. 如果 do-dbs 和 ignore-dbs 都没有设置,开始判断 do-tables(4)
  4. 当 do-tables 有设置:
    • 如果表名命中 do-tables,则该表命中,需要被迁移
    • 如果表名没有命中 do-tables,该表不需要迁移
  5. do-tables 没有设置且 ignore-tables 有设置
    • 当表名命中 ignore-tables,则该表不需要被迁移
    • 当表名没有命中 ignore-tables,该表需要被迁移
  6. 当 do-tables 和 ignore-tables 都没有设置,则该表需要被迁移

从这个规则里面我们可以看出:

  1. 在设置了 do-* 的时候,设置 ignore-* 是没有用的(并不是直觉上的 do-dbs - ignore-dbs 或者 do-tables - ignore-tables)
  2. 设置了 do-dbs 的时候,记得再给需要迁移的表设置 do-tables(或者在不设置 do-tables 的情况下用 ignore-tables 过滤掉不需要的表)或者直接让 do-tables 为空。

另外,DM 的 BAList 在这几个发行版里并没有太大改动,基本功能是一致的,不推荐为了测试 BAList 是否存在 bug 去实验其他版本。

2 个赞
block-allow-list:
list1:
    do-dbs: [“db1”,“db2”,“db3”]
    do-tables:
        - db-name: “db1”
          tbl-name: “tb1”
   ignore-tables:
        - db-name: “db2”
          tbl-name: “tb2”

从这个设置我们可以看到:

  1. db1.tb1 命中 do-dbs 和 do-tables,因此成功被迁移
  2. db2 的表命中 do-dbs,但没有命中任何 do-tables,因此不会被迁移
  3. db3 的表同理,命中 do-dbs 但没有命中 do-tables,因此没有被迁移
1 个赞

谢谢,不是为了测试上6.0,是正式环境就用6.0(我们做BI报表,表都是只读使用,看了6.0部分性能提升,只要不会经常奔溃,就直接上了)

block-allow-list:
list1:
do-dbs: [“db1”]
ignore-dbs: [“db2”,“db3"]
do-tables:
- db-name: “db1”
tbl-name: “tb1”
ignore-tables:
- db-name: “db2”
tbl-name: “tb2”
- db-name: “db3”
tbl-name: “tb3”

routes:
route-rule-1:
schema-pattern: “db1”
target-schema: “dball”
route-rule-2:
schema-pattern: “db2”
target-schema: “dball”
route-rule-3:
schema-pattern: “db3”
target-schema: “dball”

这样是否正常? 但执行后还是一样

  1. db1.tb1 命中 do-dbs,随后命中 do-tables,成功迁移
  2. db2 的所有表都没有命中 do-dbs,被忽略
  3. db3 的所有表都没有命中 do-dbs,被忽略

可以按照上面给出的算法自己推演一下呀。

从这个规则里面我们可以看出:

1. 在设置了 do-* 的时候,设置 ignore-* 是没有用的( **并不是直觉上的 do-dbs - ignore-dbs 或者 do-tables - ignore-tables** )
2. 设置了 do-dbs 的时候,记得再给需要迁移的表设置 do-tables(或者在不设置 do-tables 的情况下用 ignore-tables 过滤掉不需要的表)或者直接让 do-tables 为空。

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