MySQL复制出现“DUPLICATE KEY”错误的原因是什么?
我正在设置主-主复制。假设有两个master,master1和master2,数据一直插入master1。
我使用的查询是“INSERT INTO temp (temp_column2, temp_column3,...) VALUES ('XXX', 'YYY',...)”,其中 temp_column1 是 auto_increment 列。
在我的设置中,两个守护进程将数据插入 master1 并且它正在创建重复键错误。
我不明白为什么会这样。大多数情况下,只要出现问题,重复键错误就是该行与其下一行之间的冲突。
例如:
#### 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 以修复复制。
为什么 DUPLICATE KEY 错误总是不断发生?有什么解决办法吗?是 mysql 错误吗?
最佳答案
mysql 中的复制不会尝试在数据库中的所有节点之间保持一致的状态。有集群解决方案尝试这样做,但通常 (IME):
需要在节点间传递大量的同步数据
因此通常要慢得多
当他们失败时,他们会失败
基本上,您应该始终假设每个节点上的 DML 操作之间会有不可预测的延迟。
您的问题似乎出现了,因为您允许在多个节点上进行插入,并且正在使用不带 setting the increment and offset 的自动递增字段适合于节点。
关于mysql - "DUPLICATE KEY"错误的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656314/