课程名称:3.6.1 Data migration tools introduction (TiDB 数据迁移工具介绍)
学习时长:
20min
课程收获:
能够使用数据迁移工具迁移数据到 TiDB 中。
课程内容:
Dumpling
Dumpling 是使用 Go 开发的数据库备份工具,在已启动的集群执行导出命令,可将数据导出为 SQL 或 CSV。
对比 Mydumper 的优点:
1.支持导出为 SQL 或 CSV。
2.支持 table-filter,过滤数据更容易。
3.针对 TiDB 做了更多优化,包括:
1.支持配置单条 SQL 语句的内存限制。
2.对 TiDB 4.0 及以上的版本,支持自动调整 GC 时间。
3.使用 TiDB 隐藏列 column_tidb_rowid 优化了单表导出的性能。
4.可以使用 tidb_snapshot 设置备份时间点,而不需要 FLUSH TABLES WITH READ LOCK。
TiDB Lightning
是一个将全量数据导入 TiDB 的工具,支持导入由 Mydumper 导出的 SQL dump 或 CSV 文件。适用于快速导入大量新数据或恢复全量备份。
如图, TiDB Lightning 整体工作原理如下:
- 在导数据之前,
tidb-lightning
会自动将 TiKV 集群切换为“导入模式” (import mode),优化写入效率并停止自动压缩。tidb-lightning
会在目标数据库建立架构和表,并获取其元数据。- 每张表都会被分割为多个连续的 区块 ,这样来自大表 (200 GB+) 的数据就可以用增量方式并行导入。
tidb-lightning
会为每一个区块准备一个“引擎文件 (engine file)”来处理键值对。tidb-lightning
会并发读取 SQL dump,将数据源转换成与 TiDB 相同编码的键值对,然后将这些键值对排序写入本地临时存储文件中。- 当一个引擎文件数据写入完毕时,
tidb-lightning
便开始对目标 TiKV 集群数据进行分裂和调度,然后导入数据到 TiKV 集群。引擎文件包含两种: 数据引擎 与 索引引擎 ,各自又对应两种键值对:行数据和次级索引。通常行数据在数据源里是完全有序的,而次级索引是无序的。因此,数据引擎文件在对应区块写入完成后会被立即上传,而所有的索引引擎文件只有在整张表所有区块编码完成后才会执行导入。- 整张表相关联的所有引擎文件完成导入后,
tidb-lightning
会对比本地数据源及下游集群的校验和 (checksum),确保导入的数据无损,然后让 TiDB 分析 (ANALYZE
) 这些新增的数据,以优化日后的操作。同时,tidb-lightning
调整AUTO_INCREMENT
值防止之后新增数据时发生冲突。表的自增 ID 是通过行数的 上界 估计值得到的,与表的数据文件总大小成正比。因此,最后的自增 ID 通常比实际行数大得多。这属于正常现象,因为在 TiDB 中自增 ID 不一定是连续分配的。- 在所有步骤完毕后,
tidb-lightning
自动将 TiKV 切换回“普通模式” (normal mode),此后 TiDB 集群可以正常对外提供服务。
TiDB Data Migration (DM 2.0)
TiDB Data Migration (DM) 是一体化的数据迁移任务管理平台,支持从 MySQL 或 MariaDB 到 TiDB 的全量数据迁移和增量数据复制。使用 DM 工具有利于简化错误处理流程,降低运维成本。
架构简图
迁移功能介绍
下面简单介绍 DM 数据迁移功能的核心特性。
Table routing
Table Routing 是指将上游 MySQL 或 MariaDB 实例的某些表迁移到下游指定表的路由功能,可以用于分库分表的合并迁移。
Block & allow table lists
Block & Allow Table Lists 是指上游数据库实例表的黑白名单过滤规则。其过滤规则类似于 MySQL
replication-rules-db
/replication-rules-table
,可以用来过滤或只迁移某些数据库或某些表的所有操作。Binlog event filter
Binlog Event Filter 是比库表迁移黑白名单更加细粒度的过滤规则,可以指定只迁移或者过滤掉某些
schema
/table
的指定类型的 binlog events,比如INSERT
,TRUNCATE TABLE
。Shard support
DM 支持对原分库分表进行合库合表操作,但需要满足一些使用限制。
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: