请选择 进入手机版 | 继续访问电脑版

爱分享吧

 找回密码
 立即注册11
搜索
热搜: 活动 交友 discuz
查看: 1965|回复: 0

ALTER TABLE 出现duplicate primary xxx报错的原因及处理?

[复制链接]

75

主题

75

帖子

1262

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1262
发表于 2019-9-2 16:19:45 | 显示全部楼层 |阅读模式


ALTER TABLE 出现duplicate primary xxx报错的原因及处理?
好多同学都曾经问过这个问题,还有同学说这是bug,实际上这并不是bug

一、原因分析
1、Online DDL操作时MySQL会将DML操作缓存起来存入到变更日志
2、等到DDL执行完成后再应用变更日志中的DML操作
3、在Oline DDL执行期间,并行的DML可能会没先检查唯一性直接插入一条相同主键的数据,这时并不会导致DDL报错,而是在DDL执行完成再次应用变更日志时才报错,最终导致DDL报错执行失败

二、问题说明
其实这是Online DDL的正常情况,官方文档说明如下:

When running an in-place online DDL operation, the thread that runs the ALTER TABLE statement applies an online log of DML operations that were run concurrently on the same table from other connection threads. When the DML operations are applied, it is possible to encounter a duplicate key entry error (ERROR 1062 (23000): Duplicate entry), even if the duplicate entry is only temporary and would be reverted by a later entry in the online log. This is similar to the idea of a foreign key constraint check in InnoDB in which constraints must hold during a transaction

ref:https://dev.mysql.com/doc/refman ... dl-limitations.html

三、建议
1、推荐使用pt-osc、gh-ost等第三方工具进行DDL操作
2、建议在业务低谷期进行操作


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册11

本版积分规则

Archiver|手机版|小黑屋|爱分享吧

GMT+8, 2021-12-4 00:32 , Processed in 0.057928 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表