TiDB Data Migration
TiDB Data Migration (DM) 是一款便捷的数据迁移工具,支持从与 MySQL 协议兼容的数据库(MySQL、MariaDB、Aurora MySQL)到 TiDB 的全量数据迁移和增量数据同步。使用 DM 工具有利于简化数据迁移过程,降低数据迁移运维成本。
版本说明
DM 工具的稳定版本包括 v5.3、v2.0、v1.0。其中,v1.0 为较旧的版本,不推荐使用。建议使用 DM 的最新稳定版本 v5.3。
DM 工具的文档目前独立于 TiDB 文档。要访问 DM 工具的文档,请点击以下链接:
基本功能
本节介绍 DM 工具的核心功能模块。
Block & allow lists
Block & Allow Lists 的过滤规则类似于 MySQL replication-rules-db
/replication-rules-table
,用于过滤或指定只迁移某些数据库或某些表的所有操作。
Binlog event filter
Binlog Event Filter 用于过滤源数据库中特定表的特定类型操作,比如过滤掉表 test
.sbtest
的 INSERT
操作或者过滤掉库 test
下所有表的 TRUNCATE TABLE
操作。
Table routing
Table Routing 是将源数据库的表迁移到下游指定表的路由功能,比如将源数据表 test
.sbtest1
的表结构和数据迁移到 TiDB 的表 test
.sbtest2
。它也是分库分表合并迁移所需的一个核心功能。
高级功能
分库分表合并迁移
DM 支持对源数据的分库分表进行合并迁移,但有一些使用限制,详细信息请参考悲观模式分库分表合并迁移使用限制和乐观模式分库分表合并迁移使用限制。
对第三方 Online Schema Change 工具变更过程的同步优化
在 MySQL 生态中,gh-ost 与 pt-osc 等工具被广泛使用,DM 对其变更过程进行了特殊的优化,以避免对不必要的中间数据进行迁移。详细信息可参考 online-ddl。
使用 SQL 表达式过滤某些行变更
在增量同步阶段,DM 支持配置 SQL 表达式过滤掉特定的行变更,以实现对同步数据的更精细控制。详细信息可参考使用 SQL 表达式过滤某些行变更。
使用限制
在使用 DM 工具之前,需了解以下限制:
数据库版本要求
MySQL 版本 > 5.5
MariaDB 版本 >= 10.1.2
DDL 语法兼容性限制
目前,TiDB 部分兼容 MySQL 支持的 DDL 语句。因为 DM 使用 TiDB parser 来解析处理 DDL 语句,所以目前仅支持 TiDB parser 支持的 DDL 语法。详见 TiDB DDL 语法支持。
DM 遇到不兼容的 DDL 语句时会报错。要解决此报错,需要使用 dmctl 手动处理,要么跳过该 DDL 语句,要么用指定的 DDL 语句来替换它。详见如何处理不兼容的 DDL 语句。
分库分表数据冲突合并
- 如果业务分库分表之间存在数据冲突,可以参考自增主键冲突处理来解决;否则不推荐使用 DM 进行迁移,如果进行迁移则有冲突的数据会相互覆盖造成数据丢失。
- 分库分表 DDL 同步限制,参见悲观模式下分库分表合并迁移使用限制以及乐观模式下分库分表合并迁移使用限制。
数据源 MySQL 实例切换
- 当 DM-worker 通过虚拟 IP(VIP)连接到 MySQL 且要切换 VIP 指向的 MySQL 实例时,DM 内部不同的 connection 可能会同时连接到切换前后不同的 MySQL 实例,造成 DM 拉取的 binlog 与从上游获取到的其他状态不一致,从而导致难以预期的异常行为甚至数据损坏。如需切换 VIP 指向的 MySQL 实例,请参考虚拟 IP 环境下的上游主从切换对 DM 手动执行变更。