历史的tidb表有14亿条数据,现在要想把表改成hash分区表,根据官方提供的文档,发现只能重新建一个新的表分区在手动把数据同步过去,想了个办法select insert但是感觉会有影响,所以问问DM是否支持TIDB同步到TIDB或者有没有更安全的同步数据方式呢
DM支持从与MySQL协议兼容的数据库( MySQL,MariaDB,Aurora MySQL )
到TiDB的数据迁移
不支持,考虑下 TiCDC 吧
DM是以slave身份用CHANGE MASTER的方式连接到上游数据库的,即上游数据库必须支持MySQL的主从协议,TiDB是不支持的
不支持 可以考虑CDC、TIDBBINLOG
DM是伪装成MySQL Slave来解析binlog的,上游不能是TIDB
调研了下,CDC貌似不支持全量数据的同步
明白了,那有什么好的办法吗
如果上游是MySQL,下游是TiDB,就用DM来同步
如果上游是TiDB,下游是MySQL/TiDB/Kafka等,就用TiCDC或者TiDB-Binlog
我了解TICDC和TIDB-Binlog只是增量数据的同步,那全量的数据怎么同步呀
全量数据可用BR或者dumpling+lighting工具导过去,BR和dumpling在备份的时候会带有一个时间戳,然后用TiCDC或TiDB-Binlog进行增量同步,增量同步的起点--start_ts为备份的时间戳,需要保证--start_ts不能早于GC Safepoint
谢谢老哥,我尝试使用br来同步数据,但是新表做完分区以后,表结构有变化,主键由单个id字段变为了id+hash分区字段,br全量同步提示结构不一致。
另外dumpling+lighting这种导数我猜测是通过insert语句单条插入,如果这样还不如我写个程序批量insert来的快,历史数据有14亿条
lightning的Local-backend导入模式不是insert语句单条插入,比较快
https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-backends#tidb-lightning-后端
lightning不是insert过的的,它有3种后端模式,你使用Local-backend模式是直接Ingest到TiKV上的,速度不慢。而且这不仅仅是一个速度快慢的问题,你需要为cdc定义一个起始时间戳,你自己写脚本数据的版本不在同一个时间戳上,除非你是在同一个事务中insert,TiDB对单个事务是有大小限制的,14亿数据根本不可能在一个事务中实现
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。