alter table modify column 多个字段_MySQL add/drop字段时报主键冲突

在执行MySQL的ALTER TABLE修改列或添加/删除字段时,可能会遇到主键冲突错误,即使实际查询中并无冲突记录。这通常是由于在线DDL过程中记录的DML操作在commit阶段重新应用时导致的。为解决这一问题,推荐使用pt-osc或gh-ost工具进行在线DDL变更。官方讨论表明这是MySQL online DDL的限制,涉及因素包括临时日志文件大小限制和业务高峰期的DML操作。
摘要由CSDN通过智能技术生成

问题现象

很多DBA朋友做ddl 变更比如添加、删除字段时,一定概率上会遇到如下报错:

Duplicate entry '7458421' for key 'PRIMARY' 

错误提示是主键冲突,但是当我们去查询 id= 7458421 时,并无此记录。是不是很奇怪?遇到这种情况,一般有如下场景:

1 表具有一个或者多个唯一键。

2 表比较大,执行DDL耗时超过数十秒。

3 表的insert 操作比较频繁。

问题分析

首先我们通过一个思维导图了解一下MySQL online DDL 的过程,大家注意commit阶段,会把ddl 执行期间的记录的 log 重新应用到新的表上。

099e7721596ad4449689ede56412d98e.png

从官方文档中的描述所说 online ddl 期间,其他会话执行的dml操作造成唯一键冲突的sql会记录到 online log 中ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值