【 TiDB 使用环境】测试
【 TiDB 版本】v6.5.6
【遇到的问题:问题现象及影响】
请问一下,在DM的task文件当中,如何配置规则名称为两个
这样
block-allow-list: # 如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list。
rule-1:
do-dbs: ["test*"] # 非 ~ 字符开头,表示规则是通配符;v1.0.5 及后续版本支持通配符规则。
do-tables:
- db-name: "test[123]" # 匹配 test1、test2、test3。
tbl-name: "t[1-5]" # 匹配 t1、t2、t3、t4、t5。
- db-name: "test"
tbl-name: "t"
rule-2:
do-dbs: ["~^test.*"] # 以 ~ 字符开头,表示规则是正则表达式。
ignore-dbs: ["mysql"]
do-tables:
- db-name: "~^test.*"
tbl-name: "~^t.*"
- db-name: "test"
tbl-name: "t"
ignore-tables:
- db-name: "test"
tbl-name: "log"
一个是功能里的一个是实例里的,我想知道实例里的那个怎么定义两个过滤规则名称
还有个问题想请教一下,请问您这个DM的配置文件rule-2这块会生效吗?
我记着do-tables和ignore-tabes如果在一个里面只能生效一个
你在1个规则里面可以定义多种规则啊,例如这样
block-allow-list: # 定义数据源迁移表的过滤规则,可以定义多个规则。如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list
bw-rule-1: # 规则名称
do-dbs: ["~^test.*", "user"] # 迁移哪些库
ignore-dbs: ["mysql", "account"] # 忽略哪些库
do-tables: # 迁移哪些表
- db-name: "~^test.*"
tbl-name: "~^t.*"
- db-name: "user"
tbl-name: "information"
bw-rule-2: # 规则名称
ignore-tables: # 忽略哪些表
- db-name: "user"
tbl-name: "log"
一般这个配置多个针对的是不同的数据源,针对同一个数据源,不可能,又匹配到这个表不同步,有匹配到这个表要同步啊。。。
那这个bw-rule-2名称是在哪里定义的
那就是说他是不可以一个数据源有多个规则的,因为意义不大,也就没搞这种。
当时看官网直接在上面写了一个bw-rule-2,但却没有写哪里定义的它,在第二个数据源也没写名称,我以为是可以一个源对应多个规则的,但是没有去考虑写俩个的意义。
这个应该其实是在分库分表合并时用的, 多个上游的MySQL source可以用不同的block-allow-list(但是每个source只能选择其中一个)
好的,谢谢,了解了
两个白名单规则基本上都是针对上游同一数据源不同库的规则设定。直接复制原有的规则,改个名字,然后在对应的数据库后面增加不同的规则 ,或者同一个规则下面写多个定义规则 规定不同的库或者表
如果我要对上游mysql库,两个schema的表进行一个是过滤操作,一个是指定操作的话,就一定要设置两个数据源吗
是想这么操作,但是同一个数据源如何定义出两个规则名字,这个是我最初的问题。
同一个数据源下面写rule规则的时候多写一个就行了,写多个规则肯定是针对不同的库或者表,把这个写上就行,
就像你说的一个要过滤,一个要指定操作
可以试试这样,规则内容自己根据自己需求修改
mysql-instances:
- source-id: “test1”
block-allow-list: “bw-rule-1”,“bw-rule-2”
filter-rules: [“filter1”,“filter2”]
meta:
binlog-name: “mysql-db40-bin.000080”
binlog-pos: 423320383
block-allow-list:
bw-rule-1:
do-dbs: [“db_name1”]
do-tables:
- db-name: “"
tbl-name: "”
bw-rule-2:
do-dbs: [“db_name2”]
do-tables:
- db-name: “"
tbl-name: "”
filters:
filter1:
schema-pattern: “db_name1”
events: [“drop database”,“truncate table”, “drop table”,“delete”,“create index”,“drop index”]
sql-pattern: [“^CREATE\s+DEFINER”,“^DROP\s+EVENT”]
action: Ignore
filter2:
schema-pattern: “db_name2”
events: [“drop database”,“truncate table”, “drop table”,“delete”,“create index”,“drop index”]
action: Ignore
学习了
1个规则名称里面可以定义多个rule
请问 block-allow-list: “bw-rule-1”,“bw-rule-2” 是测试过的可行的吗
我没搞过这么分的这么细的,我只搞一个规则全部库通用,如果这个不行的话,那就就用同一个数据源写两个souce-id,
mysql-instances:
- source-id: “test1”
block-allow-list: “bw-rule-1”
filter-rules: [“filter1”] - source-id: “test1”
block-allow-list: “bw-rule-2”
filter-rules: [“filter2”]
或者同一个IP地址写两个数据源
mysql-instances:
- source-id: “test1”
block-allow-list: “bw-rule-1”
filter-rules: [“filter1”] - source-id: “test2”
block-allow-list: “bw-rule-2”
filter-rules: [“filter2”]
你可以都试试呀,一个数据源多个白名单这个没测试过,后面两个肯定是可以用的,哪个用着顺手用哪个。
中括号不行
嗯 我试试相同数据源两个source-id可不可以