dm 同步数据时路由不生效

【 TiDB 使用环境】测试环境
【 TiDB 版本】6.5.1
【复现路径】场景一:上游mysql 数据源里有test库,同步到下游更改为test1库,但下游会同时存在test 和test1库(一个source 多个task的情形,)。场景二:下游tidb有test库,使用dm 将一个数据源的test库同步到下游为test1库,删除上游mysql 的test库时,会将下游的test 和test1库都删除。
【遇到的问题:问题现象及影响】
【资源配置】
routes:

rule-1:
schema-pattern: “test”
table-pattern: “aaa”
target-schema: “test1”
target-table: “aaa”

block-allow-list:
rule-1:
do-dbs: [
“test”
]

可以看出这是一个关于DM同步数据的问题,需要使用DM的相关知识来回答。

首先,对于场景一,可以使用DM的route-rules来解决。在route-rules中,可以指定源库和目标库的对应关系,例如:

route-rules:
  - name: "test to test1"
    schema-pattern: "test"
    target-schema: "test1"

这样,在同步数据时,DM会将源库中的数据同步到目标库中,而不会将数据同步到源库中已经存在的同名库中。

对于场景二,可以使用block-allow-list来解决。在block-allow-list中,可以指定哪些库不允许被删除,例如:

block-allow-list:
  rule-1:
    do-dbs: ["test1"]

这样,在删除上游MySQL的test库时,DM会检查下游TiDB中的test1库是否在block-allow-list中,如果在,则不会被删除。

至于路由不生效的问题,可以检查DM的配置文件中是否正确配置了route-rulesblock-allow-list,以及是否正确启动了DM。如果问题仍然存在,可以查看DM的日志文件,以获取更多的信息。

官方文档里没看到有 - name: "test to test1"这个配置啊

tiup dmctl config task <task-name>

看看任务提交后的task配置到底是什么样的。

# 从 DM v2.0.2 开始,Binlog event filter 也可以在上游数据库配置文件中进行配置
# case-sensitive: false
# filters:
# - schema-pattern: dmctl
#   table-pattern: t_1
#   events: []
#   sql-pattern:
#   - alter table .* add column `aaa` int
#   action: Ignore

https://docs.pingcap.com/zh/tidb/stable/dm-source-configuration-file#--schema-pattern-dmctl

看看这个内容

路由规则正常,有点怀疑是bug ,我看社区里也有人遇到这种情况

看了下,这个和遇到的这个现象无关

查查数据库的映射关系

tiup dmctl config task 这种方式查过了,映射关系正常

经过测试,当设置table-pattern和 target-table时就有问题,不知道为什么这么做,是bug 还是就这么设计的。

虽然下游存在 test 库,以及会同步删除 test 库,但是不会建表,也不会同步数据。是么

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