本文档介绍如何将数据从一个 TiDB 集群迁移至另一 TiDB。在如下场景中,你可以将数据从一个 TiDB 集群迁移至另一个 TiDB 集群:
- 拆库:原 TiDB 集群体量过大,或者为了避免原有的 TiDB 集群所承载的数个业务之间互相影响,将原 TiDB 集群中的部分表迁到另一个 TiDB 集群。
- 迁库:是对数据库的物理位置进行迁移,比如更换数据中心。
- 升级:在对数据正确性要求严苛的场景下,可以将数据迁移到一个更高版本的 TiDB 集群,确保数据安全。
本文将模拟整个迁移过程,具体包括以下四个步骤:
- 搭建环境
- 迁移全量数据
- 迁移增量数据
- 平滑切换业务
第 1 步:搭建环境
-
部署集群。
使用 tiup playground 快速部署上下游测试集群。更多部署信息,请参考 tiup 官方文档。
# 创建上游集群 tiup --tag upstream playground --host 0.0.0.0 --db 1 --pd 1 --kv 1 --tiflash 0 --ticdc 1 # 创建下游集群 tiup --tag downstream playground --host 0.0.0.0 --db 1 --pd 1 --kv 1 --tiflash 0 --ticdc 1 # 查看集群状态 tiup status
-
初始化数据。
测试集群中默认创建了 test 数据库,因此可以使用 sysbench 工具生成测试数据,用以模拟真实集群中的历史数据。
sysbench oltp_write_only --config-file=./tidb-config --tables=10 --table-size=10000 prepare
这里通过 sysbench 运行 oltp_write_only 脚本,其将在测试数据库中生成 10 张表 ,每张表包含 10000 行初始数据。tidb-config 的配置如下:
mysql-host=172.16.6.122 # 这里需要替换为实际上游集群 ip mysql-port=4000 mysql-user=root mysql-password= db-driver=mysql # 设置数据库驱动为 mysql mysql-db=test # 设置测试数据库为 test report-interval=10 # 设置定期统计的时间间隔为 10 秒 threads=10 # 设置 worker 线程数量为 10 time=0 # 设置脚本总执行时间,0 表示不限制 rate=100 # 设置平均事务速率 tps = 100
-
模拟业务负载。
实际生产集群的数据迁移过程中,通常原集群还会写入新的业务数据,本文中可以通过 sysbench 工具模拟持续的写入负载,下面的命令会使用 10 个 worker 在数据库中的 sbtest1、sbtest2 和 sbtest3 三张表中持续写入数据,其总 tps 限制为 100。
sysbench oltp_write_only --config-file=./tidb-config --tables=3 run
-
准备外部存储。
在全量数据备份中,上下游集群均需访问备份文件,因此推荐使用