zoukankan      html  css  js  c++  java
  • alter table 出现duplicate primary xxx报错的原因及处理?

    alter table 出现duplicate primary xxx报错的原因及处理?
    
    
    一、原因分析
    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/8.0/en/innodb-online-ddl-limitations.html
    
    
    三、建议
    1、推荐使用pt-osc、gh-ost等第三方工具进行DDL操作。
    2、建议在业务低谷期进行操作。
  • 相关阅读:
    性能百万/s:腾讯轻量级全局流控方案详解
    Swagger2
    shiro 入门
    01、单例模式
    02、工厂方法
    04、模板模式
    13、Adapter 适配器
    14、迭代器
    Java 面向切面 AOP
    spring boot 中使用 Redis 与 Log
  • 原文地址:https://www.cnblogs.com/zhouwanchun/p/13141752.html
Copyright © 2011-2022 走看看