tidb里面的分表怎么合并成一张表?

【 TiDB 使用环境】生产
【 TiDB 版本】5.4
【遇到的问题】

我们之前的MySQL数据库,有一个业务表比较大,分表分成了100张表。
第一次从MySQL迁移到tidb的时候,原封不动的直接同步到了tidb,就没有做表合并。现在tidb里面这个业务表也有一百张表,但是我想把这100张表在tidb里面合并回一张表,找了一下文档,没找到合适的方案,大佬们有对策吗?谢谢

4 个赞

可以将其他分表都迁移到表1中去,然后再TRUNCATE TABLE 分表,不知对你有用没,

3 个赞

思路: insert into table select 分表 where _tidb_rowid >m order by _tidb_rowid asc limit n
根据_tidb_rowid或 主键往前推进。

注意:需要控制n的数量 (数量太大容易oom)

可以写shell脚本定时执行,执行成了就记录日志,直到分表全部合并到一张表。

3 个赞

考虑使用tidb的DM功能,route路由功能能实现表的合并

1 个赞

tidb主打不要分库分表。所以你新建一个空表,依次把这100个表的数据合并进去就行。前提是100个表没有数据冲突。

2 个赞

创建新表,然后select into.

1 个赞

select into 到一张表 对历史数据是可以的,但是增量数据很难,尽量避免业务停机

2 个赞

select into 到一张表 对历史数据是可以的,但是增量数据很难,尽量避免业务停机

1 个赞

数据应该没啥问题,id都是雪花算法分布式id,select into 到一张表 对历史数据是可以的,但是增量数据很难,尽量避免业务停机。

1 个赞

DM我看文档只能从MySQL到tidb吧,我这里源头已经在tidb了

1 个赞

不停机增量数据怎么办呢

1 个赞

我觉得 一般做法就是select into 了

1 个赞

不停机,那就只能考虑,迁移工具了,或者使用kafaka等工具了

1 个赞

搞个复杂的,dumpling 100张分库表,新建1张合并表导进去,从dumpling出了的时间点配置cdc同步到kafka,然后消费kafka数据写入值新建的合并表

1 个赞

新建表没有指定特定的主键 应该也没事

1 个赞

这工作量就老大了,kafka后面写入增量数据,我不知道有没有成熟的工具,如果自己手动解析再写入tidb,这就很麻烦

1 个赞

我还得考虑不停业务:innocent:

1 个赞

大佬,迁移工具有推荐吗

1 个赞

可以使用dm https://docs.pingcap.com/zh/tidb/stable/dm-overview

1 个赞

增量是不是可以利用binlog?