首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复键错误的原因是什么?

重复键错误的原因是什么?
EN

Stack Overflow用户
提问于 2011-12-28 21:10:43
回答 3查看 3.6K关注 0票数 2

MySQL复制中出现重复键错误的原因是什么?

我正在进行主-主复制设置。假设有两个母版,master1和master2,数据总是插入到master1中。

我使用的查询是"INSERT INTO temp (temp_column2,temp_column3,...) VALUES ('XXX','YYY',...)“其中temp_column1是auto_increment列。在我的设置中,两个守护进程将数据插入到master1中,并创建了一个重复的键错误。

我不明白为什么会这样。大多数情况下,当问题发生时,重复键错误是该行与其下一行之间的冲突。

例如:

代码语言:javascript
复制
#### on master1 ####
       temp_column1, temp_column2, temp_column3, timestamp
Row1:         1      'XXX',        'YYY',         2011-12-28 12:00:00
Row2:         3      'AAA',        'BBB',         2011-12-28 12:00:00

#### on master2 (replication mysql instance) ####
       temp_column1, temp_column2, temp_column3, timestamp
Row1:         1      'AAA',        'BBB',         2011-12-28 12:00:00

Row2:    (Duplicate key error) when trying to insert row1 ('XXX', 'YYY')

因此,我正在更新master2中的Row2 id以修复复制。

为什么总是出现重复键错误?对此有什么解决方案吗?是mysql的bug吗?

EN

回答 3

Stack Overflow用户

发布于 2011-12-28 23:05:03

mysql中的复制不会尝试在数据库中的所有节点上保持一致的状态。有一些集群解决方案试图做到这一点,但通常(IME):

  1. 需要在节点之间传递大量的同步数据
  2. 的速度通常要慢得多因此
  3. 出现故障时,它们会以极大的速度进行

基本上,您应该始终假设每个节点上的DML操作之间存在不可预测的延迟。

看起来您的问题已经出现了,因为您允许在多个节点上插入,并且为节点适当地使用了不带setting the increment and offset的自动增量字段。

票数 2
EN

Stack Overflow用户

发布于 2011-12-28 21:47:19

重复表中现有唯一索引或主键值的行会导致重复键错误

如果使用IGNORE关键字,则在执行INSERT语句时发生的错误将被视为警告。例如,在不使用IGNORE的情况下,重复表中现有唯一索引或主键值的行将导致重复键错误,并且语句将中止。如果使用IGNORE,仍然不会插入行,但不会发出错误。

参考http://dev.mysql.com/doc/refman/5.5/en/insert.html

票数 0
EN

Stack Overflow用户

发布于 2012-01-04 20:47:40

也许是因为这个bug:http://bugs.mysql.com/bug.php?id=61209

检查服务器上的auto_increment_offset和innodb_autoinc_lock_mode的值是什么,并尝试使用auto_increment_offset = 1的服务器。

这是我为这个bug打的补丁,但它仍在等待MySQL/Oracle的响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8656314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档