mysql - "DUPLICATE KEY"错误的原因?

标签 mysql

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):

  1. 需要在节点间传递大量的同步数据

  2. 因此通常要慢得多

  3. 当他们失败时,他们会失败

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

您的问题似乎出现了,因为您允许在多个节点上进行插入,并且正在使用不带 setting the increment and offset 的自动递增字段适合于节点。

关于mysql - "DUPLICATE KEY"错误的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656314/

相关文章:

mysql - Node : binding error in query with like

php - 从数据库表中打印格式化的多维数组

php - 使用PHP形式将数据输入MySQL数据库

mysql - 将一个表的主 ID 插入到另一个表中

mysql - 将数据从一个 mySQL 表字段移动到另一个表字段,其中每个表都有一个匹配的 id

php - 使用 php 和 mysql 进行用户身份验证

mysql 找到比今天小的最新记录

mysql - Laravel 5.5 根据 session 选择用户,角色如下

mysql - SQL 查询按行号排序和更新(SQLFiddle 示例)

mysql - 替代 mysql 表行背景颜色