把两个数据数据库的数据迁移到tidb

目前需要把两个数据库的数据源迁移到tidb,想请教大家两个问题
1、两边数据源自增主键冲突,比如A库中的a表有id=1的数据,B库中的b表也有id=1的数据,A、B库的这两张表往目标库TIDB中的c表迁移数据。
2、由于合并的原因,下游的目标数据库TIDB会需要调整表结构,也就是源库和目标库表结构会有不同。这种情况的迁移能通过tidb自带的工具,如dumpling、lightning完成迁移嘛?

这个得用DM,DM支持合库合表等操作。
https://docs.pingcap.com/zh/tidb/v6.5/dm-overview

1 个赞

看能够采用中间表转换和数据处理后,再合成到正式表上去,数据量不是太多可以试试

“A库中的a表有id=1的数据” 与 “B库中的b表也有id=1的数据” 不冲突,直接搞就行了
表结构不同具体是指什么 :rofl:

我没表达清楚,a、b这两张表一起往目标库TIDB中的c表迁移数据。a\b\c表结构相同且都设有相同字段名的自增主键;
表结构不同是说目标库因为业务调整等因素,可能表结构会变化,源库和目标库的表结构可能存在不同。

:thinking:这种情况我们一般自己用etl工具做二开,主键冲突的一般加个前缀或字段标识数据来源。

1 个赞

https://docs.pingcap.com/zh/tidb/stable/dm-table-routing#提取分库分表数据源信息写入合表

dm可以做,还可以抽取dbname进额外的字段,然后这个字段和原来的id组成联合主键就可以了。

不过dm的问题是,如果源表数据量很大,就会非常慢。要快还是要用lightning。或者其他etl工具做2开。

1 个赞

那你c表中那个用来标记唯一记录呢

dm 分片方式到一个库了解一下

源库是什么数据库?如果是关系型数据库,最好在源库中按照新的表结构转换后,再用dumpling、lightning之类的工具迁移。逻辑变更的话,迁移工具可能不好适配。

我们都是在源端把数据加工好,然后投放导目标端

他的意思应该是在下走会把数据都合并到同一个表

DM应该可以满足需求

如果已有a、 b表的主键和原有库的表没有关联关系还好,可以通过etl工具可以先对源端数据进行抽取转移,如果有关联关系就不好处理了

这种情况,由于楼主你的业务表结构调整比较大,自动同步工具不一定适合,可以去看看DM的分库分表汇总同步功能是否合适你们的场景。

如果不行,大概率是需要开发一些自动同步工具来实现,比如用flink 实现实时自动汇总同步。

etl加工一下建议

看你的描述你是需要一个ETL工具,建议了解下kettle

:+1:支持用kettle

个人感觉datax比kettle要轻量一些

单从部署上看,kettle应该更简单一点 :yum: datax多了个python环境