【 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-rules
和block-allow-list
,以及是否正确启动了DM。如果问题仍然存在,可以查看DM的日志文件,以获取更多的信息。
官方文档里没看到有 - name: "test to test1"这个配置啊
有猫万事足
4
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 库,但是不会建表,也不会同步数据。是么
system
(system)
关闭
13
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。