DM迁移的时候如何处理转换mysql自增列为tidb中的auto_random

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.5.1
我需要把上游mysql的数据全量 + 增量迁移到tidb中;
现在上游某张表字段id使用的是mysql的auto_increment,如何将这个表中字段id迁移到tidb的过程中更换成auto_random;
DM中没有找到类似的filter;目前报错Invalid auto random: Explicit insertion on auto_random column is disabled.

可以修改这个参数set @@allow_auto_random_explicit_insert = true;auto_random列可以插入解决报错,
但auto_random的可用值提前耗尽;
如果不一定非得用聚簇表,非聚簇表可以用如下办法解决热点问题
shard_row_id_bits和pre_split_regions

1 个赞

可以看一下这个文档

1 个赞

这文档总结的,可以可以

我的意思是,有没有什么好办法,能够在DM迁移过程中,自动将原来表里面的自增列转换成新表里面的auto_random列。而不是开启allow_auto_random_explicit_insert这个参数按照自增列的方式插入。

没有尝试过这种操作;但是转移后可以将auto_increment转换为auto_random

开启了allow_auto_random_explicit_insert参数,dm的语句应该就可以写入了,允许显示插入auto_random列了,风险有自动分配值耗尽的情况

auto_random

auto_random修改这个

可以先建表后同步

同步完直接同意alter table modify auto_random就行啊,你同步的数据上游主键有不是随机的,还不是自增的,同步的时候提前改了auto_random也不会变快。

1 个赞

auto_random这个

印象中DM没有过滤器可以实现这个需求的;不过你可以使用IGNORE选项试一下。

auto_random这个

如果当前表的 AUTO_INCREMENT 列是主键列,且列类型为 BIGINT ,可以通过 ALTER TABLE t MODIFY COLUMN id BIGINT AUTO_RANDOM(5);AUTO_INCREMENT 切换成 AUTO_RANDOM

有没有实践经验,如果数据量很大的情况下,这个变更需要多长时间?有些表记录过亿