请问从mysql迁移到tidb前是否需要修改mysql里面的表主键id字段?

【 TiDB 使用环境】测试
【 TiDB 版本】v5.4.2

【遇到的问题:问题现象及影响】
mysql迁移数据到tidb是否需要修改表结构,主键id字段是否要删除?主要害怕迁移到tidb后导致数据不能均匀的分布

要看你的场景,实际上担心不均匀,应该是有多读的需求,那就用到聚簇表,它会根据表名和主键去生成key ,因此主键是必须的。在不采用分区表的前提下,region 会根据数据量自动分裂、均衡。一般oltp的业务建议聚簇表不分区。

好的感谢大佬指点!

意思是迁移mysql时不用删除mysql主键的自增id,tidb会自动均衡的分布数据到各个节点

tidb端需要考虑,迁移的时候是否会涉及到写热点,迁移后业务是否涉及到写热点和读热点。因为mysql的自增id 迁移到 tidb ,如果tidb端是cluster类型的聚簇表,那么数据会按照id主键进行region的分配,那么以后的插入就会顺序插入到一个region,然后region达到96MB,进行分裂,会造成写热点。

具体参考
https://docs.pingcap.com/zh/tidb/v5.4/troubleshoot-hot-spot-issues#使用-tidb-dashboard-定位热点表

https://docs.pingcap.com/zh/tidb/v5.4/high-concurrency-best-practices#tidb-数据分布原理

所以,不能简单的把自增id迁移过去,是否删除,或者不迁移自增id,只迁移其他列,都需要根据业务读写业务表进行考虑。还有就是尽量减少grpc,减少分布式事务

1 个赞

可以参考下schema设计最佳实践,高兼容模式及高性能模式
image

感谢指点

核心业务表,数据量大访问频繁的需要根据业务特点考虑下,普通表就没必要折腾了