前提:两个库表都有数据,且不能删除或库表重命名。
首先要弄清楚是否实时迁移,两个表数据是否有冲突
姑且认为实时迁移的情况下我可以想到的两种办法,
一个是有编程能力的情况,利用cdc同步到kafka中,消费kafka消费,写入到另外的表中,写入的时候是否冲突可以做检测并针对不同的情况处理
一个是没有编程能力的情况,可以利用cdc同步到mysql中,利用dm工具同步到tidb中,注意dm要设置路由规则,并且按需配置写入是否为覆盖写入
主要考虑离线场景,比如投产时需要做部分数据的移植或迁移的场景下,如果直接用insert select在数据量较大的情况下,肯定是很慢的,我是想知道这种场景下是否有一些比较高效的方法,比如并行插入,或者导入导出工具之类的方法~
多大数据量?
接近亿级别,八九千万的样子~
如果不要求实时性,最简单的方法可以尝试切割下数据量,比如一千万一次 用batch on insert into select from where 做迁移,一亿条的话这么迁移大概一两个小时能跑完。
那其实也可以使用dumpling,lightning的方式,lightning本身也有路由功能,但是不太清楚你迁移的部分数据有没有冲突的情况
有没有有类似OceanBase的OBLD工具,可以多线程并行导出为文件后再导入,总比insert性能要高得多吧
这种方式可以灵活的选择要导出的数据部分吗?比如select a,b,c from xxxx where a=11这种,既可以选择字段,也可以过滤数据
推荐迪思杰
dumping导出再导入,比直接insert select 快
表“停机迁移么”?停机的话就batch 批量按条件搞个任务迁移,有实时更新的话可以使用cdc同步库迁移
OGG试试
迪思杰是啥?
也是个办法
OGG是Oracle的同步工具吗?是否可以用在TiDB上?
具体的逻辑是要怎么操作?
1、如果目标端是空表,直接import into,效率是最高的,而且select部分支持加条件。
2、不能rename库表的原因是什么?tidb,支持在一个事务里对多个表改名。(rename table tablename to tablename_old,tablename_new to tablename;)
迁移工具好多
官方迁移工具
三方迁移工具