mysql移除自增属性dm 同步到tidb时报错

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
v4.0.8
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
mysql数据实时通过dm同步到tidb
上游mysql执行ddl变更,移除主键ID列自增属性后,同步任务报错

dm执行同步时,能打开tidb_allow_remove_auto_inc变量,再执行么?

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

dm执行同步时,能打开tidb_allow_remove_auto_inc变量,再执行么?应该不行吧,你在下游打开之后将对应表的auto_increment移除之后,dm跳过这个ddl操作继续同步吧。。。。

跳过的方式目前评估是有风险的,还需要加载最新的表结构到DM中,这个过程如果有失败了 ,就只能全同步了;

tidb_allow_remove_auto_inc变量设置成on,允许tidb移除自增主键,然后之后在调整回去

这是session级别的变量,手动开是没问题的,但是mysql数据是通过dm通过到tidb的,dm执行时不会开启这个变量

我没太明白,你现在是全量迁移库,还是已经再同步中的两套库?现在这个报错不是只是你这个表在上游进行了alter命令修改auto_increment属性吗?我的建议是你再下游开启tidb_allow_remove_auto_inc变量将对应表的auto_increment移除的alter操作手工执行一下之后,在dm中skip掉这一个操作,后面的数据会继续同步啊,风险在哪里?

1 个赞

我觉得没问题,你可以测试下

那你可以手动设置session级别的tidb_allow_remove_auto_inc变量设置成on,然后在该session手动执行alter 删除主键的SQL语句,然后dm同步任务跳过报错的DDL语句,这样也是没问题的,我生产上很多DDL同步问题,我都是这么干的

1 个赞

大佬们都建议 会话层 进行开启tidb_allow_remove_auto_inc变量参数配置?

从 TiDB 2.1.18 和 3.0.4 版本开始,TiDB 通过 session 变量 @@tidb_allow_remove_auto_inc 控制是否允许通过 ALTER TABLE MODIFYALTER TABLE CHANGE 来移除列的 AUTO_INCREMENT 属性,默认是不允许移除。

楼主如果有业务需求,可以设置看看。

1 个赞

等待结果

可以在task里增加session变量的,具体参看官方文档: https://docs.pingcap.com/zh/tidb/stable/task-configuration-file-full

这个不错,以前还真不知道dm可以设置session级别的变量,@qiuxb ,可以试下这个方法

tidb 是有变量控制这个功能的,默认是不允许tidb_allow_remove_auto_inc

如果下游表数据通过上游同步进来,跳过也不会有啥风险