通常数据量较低时,使用 DM 进行迁移较为简单,可直接完成全量+持续增量迁移工作。但当数据量较大时,DM 较低的数据导入速度 (30~50 GiB/h) 可能令整个迁移周期过长。本文所称“大数据量”通常指 TiB 级别以上。
因此,本文档介绍使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其本地导入 (local backend) 模式导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。
前提条件
- 部署 DM 集群。
- 安装 Dumpling 和 TiDB Lightning。
- 配置 DM 所需上下游数据库权限。
- 获取 TiDB Lightning 所需下游数据库权限。
- 获取 Dumpling 所需上游数据库权限。
资源要求
操作系统:本文档示例使用的是若干新的、纯净版 CentOS 7 实例,你可以在本地虚拟化一台主机,或在供应商提供的平台上部署一台小型的云虚拟主机。TiDB Lightning 运行过程中,默认会占满 CPU,建议单独部署在一台主机上。如果条件不允许,你可以将 TiDB Lightning 和其他组件(比如 tikv-server
)部署在同一台机器上,然后设置 region-concurrency
配置项的值为逻辑 CPU 数的 75%,以限制 TiDB Lightning 对 CPU 资源的使用。
内存和 CPU:因为 TiDB Lightning 对计算机资源消耗较高,建议分配 64 GB 以上的内存以及 32 核以上的 CPU,而且确保 CPU 核数和内存(GB)比为 1:2 以上,以获取最佳性能。
磁盘空间:
- Dumpling 需要能够储存整个数据源的存储空间,即可以容纳要导出的所有上游表的空间。计算方式参考下游数据库所需空间。
- TiDB Lightning 导入期间,需要临时空间来存储排序键值对,磁盘空间需要至少能存储数据源的最大单表。
- 若全量数据量较大,可适当加长上游 binlog 保存时间,以避免增量同步时缺必要 binlog 导致重做。
说明:目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 data_length
字段估算数据量:
/* 统计所有 schema 大小,单位 MiB,注意修改 ${schema_name} */ SELECT table_schema,SUM(data_length)/1024/1024 AS data_length,SUM(index_length)/1024/1024 AS index_length,SUM(data_length+index_length)/1024/1024 AS SUM FROM inf