MYSQL数据迁移到TIDB数据库

场景:MYSQL存在21W张表
如何将MYSQL的数据快速迁移到TIDB中

这么多数据可能除了速度还要考虑停机时间,建议选择DM吧。
TiDB Data Migration (DM) 是一款便捷的数据迁移工具,支持从与 MySQL 协议兼容的数据库(MySQL、MariaDB、Aurora MySQL)到 TiDB 的全量数据迁移和增量数据同步。使用 DM 工具有利于简化数据迁移过程,降低数据迁移运维成本。

参考下
https://docs.pingcap.com/zh/tidb/stable/migrate-large-mysql-to-tidb#从大数据量-mysql-迁移数据到-tidb

你这数据量很小,直接用navicat工具从mysql导出sql,然后连接tidb数据库执行sql就行

数据量大吗,tidb建表速度不快

用sqlyog或者mysqldump导出

你的问题主要问题是什么?表结构太多而且TiDB DDL比较慢导致时间长?
如果是28W个DDL慢这个问题的话,可以先迁移表结构,再迁移数据

表结构迁移:
1、7.5版本TiDB已支持并行DDL,参考:https://docs.pingcap.com/zh/tidb/stable/ddl-introduction#并发发送-ddl-请求实现快速建大量表
lightning高版本创表也是并行的,默认按region-concurrency来(PS:我没测试,你可以测试下),如果不行就拆分下开多个lightning
2、还嫌慢就把TiDB Server关掉其他,只留一个,减少ddl同步schema version给其他TiDB的时间,我实测下来由一个create table 0.5S减少到0.1S
这样的话应该能把创表的问题解决掉

数据迁移:
就正常迁移吧,你问题中也没说数据量大 :joy_cat:

DM工具支持全量和增量

表很多,还要看数据量,如果数据量也大,DM显然也不合适,手册是DUMPLING和TIGHTLING

21W张表,单表的话数据很小,就几十行

表这么多能合并数据吗

先迁移结构,然后自己写个程序也可以,使用官方工具也可以。

DM最合适,直接全量加增量

一个mysql库真有那么多表嘛?mysql迁移到tidb,为了最佳性能,有些表还是得改造下的。

那么多表,迁移的其中一个大成本确实是建表的效率上,因为 DDL 在 TiDB 内部实际上也是串行的,建表任务由 TiDB DDL owner 依次串行执行。DDL owner 每创建一张表会引起一次 DDL schema 版本的变更,而每次的 schema 版本的变更都需要同步到其他 TiDB DDL worker。因此,当需要创建的表的数量比较多时,串行建表方案会导致建表时间过长。

有一个 low 办法是,多 MySQL client 并发执行建表语句(都直连ddl owner),这样能多几个 DDL 进入队列,省掉了排队前的时间。要加快建表,推荐2个 client 执行,3个 client 执行区别不大。

最后再用 lightning local 模式导入数据。

1 个赞

数据量很少,最简单的就是navicat,多开几个窗口分批很快

这样最省事

啥业务有21W张表,没法想象

1 个赞

表数量虽然多,数据量这么小,直接用navicat工具。免去很多部署配置的操作。

DM或者Flink CDC都可以吧,或者阿里的dts, 华为的drs, 工具还是有点多的

dm全量同步吧,一点问题都没有,最优解