【TiDB 4.0 PCTA 学习笔记】- 3.6.1 Data migration tools introduction (TiDB 数据迁移工具介绍)@2班

课程名称:课程版本(101/201/301)+ 3.6.1 Data migration tools introduction (TiDB 数据迁移工具介绍)

学习时长:10min

课程收获:能够使用数据迁移工具迁移数据到 TiDB 中

课程内容:Dumpling;TiDB Lightning;DM

学习过程中遇到的问题或延伸思考:

  • 问题 1:
  • 问题 2:
  • 延伸思考 1:
  • 延伸思考 2:

学习过程中参考的其他资料

本文档介绍如何使用数据导出工具 Dumpling。该工具可以把存储在 TiDB/MySQL 中的数据导出为 SQL 或者 CSV 格式,可以用于完成逻辑上的全量备份或者导出。

如果需要直接备份 SST 文件(键值对)或者对延迟不敏感的增量备份,请参阅 BR。如果需要实时的增量备份,请参阅 TiCDC

相比于 Mydumper,Dumpling 有哪些改进之处?

  1. 支持导出多种数据形式,包括 SQL/CSV
  2. 支持全新的 table-filter,筛选数据更加方便
  3. 支持导出到 Amazon S3 云盘
  4. 针对 TiDB 进行了更多优化:
  • 支持配置 TiDB 单条 SQL 内存限制
  • 针对 TiDB v4.0.0 以上版本支持自动调整 TiDB GC 时间
  • 使用 TiDB 的隐藏列 _tidb_rowid 优化了单表内数据的并发导出性能
  • 对于 TiDB 可以设置 tidb_snapshot 的值指定备份数据的时间点,从而保证备份的一致性,而不是通过 FLUSH TABLES WITH READ LOCK 来保证备份一致性。

TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,可在此下载

TiDB Lightning 有以下两个主要的使用场景:一是大量新数据的快速导入;二是全量备份数据的恢复。目前,Lightning 支持 Dumpling 或 CSV 输出格式的数据源。你可以在以下两种场景下使用 Lightning:

  • 迅速 导入 大量新 数据。
  • 恢复所有备份数据。

TiDB Lightning 整体架构

![TiDB Lightning 整体架构]
(https://download.pingcap.com/images/docs-cn/tidb-lightning-architecture.png)

TiDB Lightning 整体工作原理如下:

  1. 在导数据之前, tidb-lightning 会自动将 TiKV 集群切换为“导入模式” (import mode),优化写入效率并停止自动压缩。
  2. tidb-lightning 会在目标数据库建立架构和表,并获取其元数据。
  3. 每张表都会被分割为多个连续的 区块 ,这样来自大表 (200 GB+) 的数据就可以用增量方式并行导入。
  4. tidb-lightning 会为每一个区块准备一个“引擎文件 (engine file)”来处理键值对。 tidb-lightning 会并发读取 SQL dump,将数据源转换成与 TiDB 相同编码的键值对,然后将这些键值对排序写入本地临时存储文件中。
  5. 当一个引擎文件数据写入完毕时, tidb-lightning 便开始对目标 TiKV 集群数据进行分裂和调度,然后导入数据到 TiKV 集群。引擎文件包含两种: 数据引擎索引引擎 ,各自又对应两种键值对:行数据和次级索引。通常行数据在数据源里是完全有序的,而次级索引是无序的。因此,数据引擎文件在对应区块写入完成后会被立即上传,而所有的索引引擎文件只有在整张表所有区块编码完成后才会执行导入。
  6. 整张表相关联的所有引擎文件完成导入后, tidb-lightning 会对比本地数据源及下游集群的校验和 (checksum),确保导入的数据无损,然后让 TiDB 分析 ( ANALYZE ) 这些新增的数据,以优化日后的操作。同时, tidb-lightning 调整 AUTO_INCREMENT 值防止之后新增数据时发生冲突。表的自增 ID 是通过行数的 上界 估计值得到的,与表的数据文件总大小成正比。因此,最后的自增 ID 通常比实际行数大得多。这属于正常现象,因为在 TiDB 中自增 ID 不一定是连续分配的
  7. 在所有步骤完毕后, tidb-lightning 自动将 TiKV 切换回“普通模式” (normal mode),此后 TiDB 集群可以正常对外提供服务。

如果需要导入的目标集群是 v3.x 或以下的版本,需要使用 Importer-backend 来完成数据的导入。在这个模式下, tidb-lightning 需要将解析的键值对通过 gRPC 发送给 tikv-importer 并由 tikv-importer 完成数据的导入; TiDB Lightning 还支持使用 TiDB-backend 作为后端导入数据。TiDB-backend 使用和 Loader 类似, tidb-lightning 将数据转换为 INSERT 语句,然后直接在目标集群上执行这些语句。详见 TiDB Lightning Backends

DM 架构

DM 主要包括三个组件:DM-master,DM-worker 和 dmctl。