TiDB Data Migration 表路由
使用 TiDB Data Migration (DM) 迁移数据时,你可以配置表路由 (Table Routing) 规则,指定将上游 MySQL/MariaDB 实例的特定表迁移到下游的特定表。
配置表路由
在迁移任务配置文件中,添加如下配置:
routes:
rule-1:
schema-pattern: "test_*"
table-pattern: "t_*"
target-schema: "test"
target-table: "t"
rule-2:
schema-pattern: "test_*"
target-schema: "test"
在简单任务场景下,推荐使用通配符匹配库表名,但需注意以下版本差异:
- 对于 v1.0.5 版及后续版本,表路由支持通配符匹配。但注意所有版本中通配符匹配中的
*
符号 只能有一个,且必须在末尾。 - 对于 v1.0.5 以前的版本,表路由支持通配符,但不支持
[...]
与[!...]
表达式。
参数解释
将根据 schema-pattern
/table-pattern
匹配上该规则的上游 MySQL/MariaDB 实例的表迁移到下游的 target-schema
/target-table
。
使用示例
下面展示了三个不同场景下的配置示例。如果你需要从小数据量分库分表 MySQL 合并迁移数据到 TiDB,请参考这篇文档
分库分表合并
假设存在分库分表场景,需要将上游两个 MySQL 实例的表 test_{1,2,3...}
.t_{1,2,3...}
迁移到下游 TiDB 的一张表 test
.t
。
为了迁移到下游实例的表 test
.t
,需要创建以下表路由规则:
rule-1
用来迁移匹配上schema-pattern: "test_*"
和table-pattern: "t_*"
的表的 DML/DDL 语句到下游的test
.t
。rule-2
用来迁移匹配上schema-pattern: "test_*"
的库的 DDL 语句,例如CREATE/DROP SCHEMA xx
。
rule-1:
schema-pattern: "test_*"
table-pattern: "t_*"
target-schema: "test"
target-table: "t"
rule-2:
schema-pattern: "test_*"
target-schema: "test"
分库合并
假设存在分库场景,将上游两个 MySQL 实例 test_{1,2,3...}
.t_{1,2,3...}
迁移到下游 TiDB 的 test
.t_{1,2,3...}
,创建一条路由规则即可:
rule-1:
schema-pattern: "test_*"
target-schema: "test"
错误的表路由
假设存在下面两个路由规则,test_1_bak
.t_1_bak
可以匹配上 rule-1
和 rule-2
,违反 table 路由的限制而报错。
rule-0:
schema-pattern: "test_*"
target-schema: "test"
rule-1:
schema-pattern: "test_*"
table-pattern: "t_*"
target-schema: "test"
target-table: "t"
rule-2:
schema-pattern: "test_1_bak"
table-pattern: "t_1_bak"
target-schema: "test"
target-table: "t_bak"