https://docs.pingcap.com/zh/tidb/stable/dm-task-configuration-guide#配置需要数据源表到目标-tidb-表的映射
如果不需要将数据源表路由到不同名的目标 TiDB 表,可以跳过该项配置。分库分表合并迁移的场景必须配置该规则。
你是个分库分表合并迁移的场景,然而完全没有配置路由规则。
从行为上必然导致207,208这两个mysql实例里面的数据相互覆盖,你下游的表也要做改造的,否则大概率造成两个mysql实例上的主键冲突,导入的时候默认开了safe-mode,数据也会是相互覆盖的。
所以你当然会觉得一会好了一会不好,和你上游的 binlog-do-db一点关系没有。
同步上游的db_to_sync库里面的table1到下游同名的库,同名的表。
routes:
route-rule-1:
schema-pattern: "db_to_sync"
table-pattern: "table1"
target-schema: "db_to_sync"
target-table: "table1"
route-rule-2:
schema-pattern: "db_to_sync"
target-schema: "db_to_sync"
mysql-instances:
- source-id: "mysql-207"
block-allow-list: "listA"
route-rules: ["route-rule-1","route-rule-2"]
- source-id: "mysql-208"
block-allow-list: "listA"
route-rules: ["route-rule-1","route-rule-2"]
你这样配置完了以后,务必记得在你下游表的主键里面添加分片键。另外一定要注意下游表的写入热点问题。
不然配置对了,表的主键冲突相互覆盖结果也不会正确。有写入热点,导入也慢。tikv负载也不均衡。