我正在向表中插入数据,并依靠auto_increment生成唯一ID,但是在某些随机情况下,它无法执行此操作,而是显示以下错误消息:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '121092752' for key 'PRIMARY'
The SQL being executed was: INSERT INTO `audit_entry` (`route`, `request_method`, `created`) VALUES ('queue/listen', 'CLI', '2018-08-27 10:03:09')
表如下:
mysql> SHOW CREATE TABLE audit_entry\G
Table: audit_entry
Create Table: CREATE TABLE `audit_entry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` datetime NOT NULL,
`user_id` int(11) DEFAULT '0',
`duration` float DEFAULT NULL,
`ip` varchar(45) DEFAULT NULL,
`request_method` varchar(16) DEFAULT NULL,
`ajax` int(1) NOT NULL DEFAULT '0',
`route` varchar(255) DEFAULT NULL,
`memory_max` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_route` (`route`),
KEY `created` (`created`)
) ENGINE=InnoDB AUTO_INCREMENT=121096793 DEFAULT CHARSET=utf8
mysql版本:
mysql> SELECT VERSION()\G
VERSION(): 5.5.59-38.11-log
遇到此问题的服务器被配置为另一台服务器的从属服务器(在2服务器雏菊链中)。它具有server_id=2
和auto_increment_offset=2
。另一台服务器具有server_id=3
和auto_increment_offset=3
。两者都有auto_increment_increment=10
。
顺便说一句,发生这种情况时,服务器的负载要比平均负载高得多。