MySQL表压缩触发ERROR 1062重复键错误的问题与解决问询
问题解决:ALTER TABLE压缩表时触发虚假重复键错误
解决方法
执行带指定算法和锁模式的DDL语句即可完成表压缩:
ALTER TABLE myTableName ROW_FORMAT=COMPRESSED, ALGORITHM=INPLACE, LOCK=SHARED;
原因说明
这是MySQL的已知问题:当执行原地在线DDL操作时,执行ALTER TABLE的线程会同步应用其他连接对该表并发执行的DML操作日志。在此过程中,可能会出现临时的重复键冲突错误——即便这个重复状态会被后续的日志操作修正,逻辑上和InnoDB事务中维持外键约束的机制类似。
排查真实重复数据的方法
如果需要确认表中是否真的存在违反duplicate_data索引约束的重复行,可以执行分组查询:
-- 替换col1、col2、col3为duplicate_data索引对应的三个字段名 SELECT col1, col2, col3, COUNT(*) AS duplicate_count FROM myTableName GROUP BY col1, col2, col3 HAVING COUNT(*) > 1;
如果查询无结果,说明不存在真实的重复数据,之前的错误完全是DDL并发过程中的临时冲突导致。
内容的提问来源于stack exchange,提问作者Mike Nathas
相关产品推荐
相关产品推荐

