同一schema下迁移库表推荐用什么方法?

前提:两个库表都有数据,且不能删除或库表重命名。

首先要弄清楚是否实时迁移,两个表数据是否有冲突

姑且认为实时迁移的情况下我可以想到的两种办法,
一个是有编程能力的情况,利用cdc同步到kafka中,消费kafka消费,写入到另外的表中,写入的时候是否冲突可以做检测并针对不同的情况处理

一个是没有编程能力的情况,可以利用cdc同步到mysql中,利用dm工具同步到tidb中,注意dm要设置路由规则,并且按需配置写入是否为覆盖写入

1 个赞

主要考虑离线场景,比如投产时需要做部分数据的移植或迁移的场景下,如果直接用insert select在数据量较大的情况下,肯定是很慢的,我是想知道这种场景下是否有一些比较高效的方法,比如并行插入,或者导入导出工具之类的方法~

多大数据量?

1 个赞

接近亿级别,八九千万的样子~

如果不要求实时性,最简单的方法可以尝试切割下数据量,比如一千万一次 用batch on insert into select from where 做迁移,一亿条的话这么迁移大概一两个小时能跑完。

1 个赞

那其实也可以使用dumpling,lightning的方式,lightning本身也有路由功能,但是不太清楚你迁移的部分数据有没有冲突的情况

1 个赞

有没有有类似OceanBase的OBLD工具,可以多线程并行导出为文件后再导入,总比insert性能要高得多吧

这种方式可以灵活的选择要导出的数据部分吗?比如select a,b,c from xxxx where a=11这种,既可以选择字段,也可以过滤数据

推荐迪思杰

1 个赞

dumping导出再导入,比直接insert select 快

表“停机迁移么”?停机的话就batch 批量按条件搞个任务迁移,有实时更新的话可以使用cdc同步库迁移

1 个赞

OGG试试

1 个赞

迪思杰是啥?

也是个办法

OGG是Oracle的同步工具吗?是否可以用在TiDB上?

具体的逻辑是要怎么操作?
1、如果目标端是空表,直接import into,效率是最高的,而且select部分支持加条件。
2、不能rename库表的原因是什么?tidb,支持在一个事务里对多个表改名。(rename table tablename to tablename_old,tablename_new to tablename;)

迁移工具好多

官方迁移工具

三方迁移工具

1 个赞