【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.1.2
【遇到的问题:问题现象及影响】
一个1T 大表, 组件非聚簇索引,现在要改成聚簇索引,需要在同集群内迁移同步导入,包含增量部分得,有没有好得同步方式,比较快得同步方式 推荐。谢谢
采用以下方法来迁移这个1TB的大表并将其非聚簇索引改为聚簇索引:
- 全量数据迁移
首先,我们需要进行全量数据迁移。对于这么大的表,建议使用TiDB Lightning来完成这一步骤[1]:
a) 使用Dumpling导出源表数据:
./dumpling -h 127.0.0.1 -P 4000 -u root -t 16 -F 256MiB -B mydb -f 'mydb.mytable' -o /data/my_db
b) 修改schema文件,将表定义改为使用聚簇索引。
c) 使用TiDB Lightning导入数据到新表:
tidb-lightning -config tidb-lightning.toml
TiDB Lightning的物理导入模式可以达到高达500 GiB/h的导入速度[2],这对于1TB的数据来说是非常高效的。
- 增量数据同步
对于增量数据同步,我们可以使用TiDB Data Migration (DM)工具[3]:
a) 配置DM任务,指定源表和目标表。
b) 启动DM任务:
tiup dmctl --master-addr 127.0.0.1:8261 start-task task.yaml
DM会自动处理schema变更,将源表的数据实时同步到新的聚簇索引表中。
- 切换业务流量
当增量同步追上后,可以在业务低峰期快速切换应用连接到新表。
需要注意的是:
- 在迁移过程中,建议暂时禁止对源表的DDL操作,以避免潜在的冲突。
- 由于是在同一集群内迁移,网络延迟较小,这有利于提高同步速度。
- 请确保目标表所在的TiKV节点有足够的存储空间。
这种方法结合了TiDB Lightning的高速导入和DM的增量同步能力,可以在保证数据一致性的同时,实现较快的迁移速度。整个过程对业务的影响也较小,只需在最后切换时有短暂的只读时间窗口。