数据迁移的概述
TIDB数据迁移(DM)是一个集成的数据迁移任务管理平台,支持从MySQL兼容的数据库(如MySQL、MariaDB、Aurora MySQL)进行全数据迁移和增量复制到TiDB。它可以帮助降低数据迁移的操作成本,简化故障处理过程。当使用DM进行数据迁移时,需要执行以下操作:
- 部署DM集群
- 创建上游数据源并保存数据源访问信息
- 创建数据迁移任务以将数据从数据源迁移到TIDB
数据迁移任务分为全量数据迁移和增量数据复制两个阶段:
- 全数据迁移:将对应表的表结构从数据源迁移到TiDB,然后读取存储在数据源中的数据,并将其写入TiDB集群。
- 增量数据复制:完成完整数据迁移后,读取从数据源的相应表更改,然后写入TIDB群集。
下面介绍DM的特点。
基本特征
本节介绍DM提供的基本数据迁移功能。
阻止并允许在模式和表级别列出迁移
的“阻止和允许”列表过滤规则类似于replication-rules-db
/Replication-Ruls-Table
MySQL的功能,可用于仅过滤或复制某些数据库的所有操作或仅限某些表。
Binlog事件过滤
的binlog事件过滤功能意味着DM可以从源数据库中的某些表中过滤某些类型的SQL语句。例如,您可以过滤所有插入
表中的陈述测试
.sbt
或过滤截断表
模式中的语句测试
.
模式和表路由
的架构和表路由特性意味着DM可以将源数据库的某个表迁移到下游的指定表中。例如,您可以从表中迁移表结构和数据测试
.sbtest1.
源数据库中的表测试
.Sbtest2.
在TiDB。这也是合并和迁移分片数据库和表的核心特性。
先进的功能
分片合并和迁移
DM支持从源数据库合并和迁移原始分片实例和表到TiDB,但有一些限制。有关详细信息,请参见分片DDL在悲观模式下的使用限制和乐观模式下的分片DDL使用限制.
在迁移过程中优化第三方在线模式更改工具
在MySQL生态系统中,gh-ost和pt-osc等工具被广泛使用。DM为这些工具提供支持,以避免迁移不必要的中间数据。有关详细信息,请参见在线DDL工具
使用SQL表达式过滤某些行更改
在增量复制阶段,DM支持SQL表达式的配置来过滤某些行更改,这允许您以更大的粒度复制数据。欲了解更多信息,请参阅使用SQL表达式过滤某些行更改.
使用的限制
在使用DM工具之前,请注意以下限制:
数据库版本要求
MySQL版本> 5.5
MariaDB版本> = 10.1.2
注意:
如果在上游MySQL/MariaDB服务器之间存在主从迁移结构,则选择以下版本。
- MySQL版本> 5.7.1
- MariaDB版本> = 10.1.3
警告:
对MySQL 8.0的支持是TIDB数据迁移v2.0的实验特征。这是不建议您在生产环境中使用。
DDL语法兼容
目前,TiDB不兼容MySQL支持的所有DDL语句。因为DM使用TiDB解析器来处理DDL语句,所以它只支持TiDB解析器支持的DDL语法。有关详细信息,请参见MySQL兼容性.
当遇到不兼容的DDL语句时,DM报告错误。要解决这个错误,您需要使用dmctl手动处理它,或者跳过这个DDL语句,或者用指定的DDL语句替换它。有关详细信息,请参见跳过或替换异常的SQL语句.
分片与冲突合并
如果分片表之间存在冲突,请参考处理自动递增主键的冲突.否则,不支持数据迁移。冲突的数据可以相互覆盖并导致数据丢失。
有关其他分片DDL迁移限制,请参见分片DDL在悲观模式下的使用限制和乐观模式下的分片DDL使用限制.
用于数据源的MySQL实例切换
当DM-Worker通过虚拟IP(VIP)连接上游MySQL实例时,如果将VIP连接切换到另一个MySQL实例,DM可能会在不同连接中同时连接到新的和旧MySQL实例。在这种情况下,迁移到DM的Binlog与DM接收的其他上游状态迁移到DM,导致不可预测的异常甚至数据损坏。要手动对DM进行必要的更改,请参阅通过虚拟IP交换DM-worker连接.