发布时间:2025-11-04 07:34:56 来源:云智核 作者:IT科技类资讯

在 MySQL 5.7 版本中,分析REPLACE INTO 操作在表存在自增主键的问题情况下,可能会出现表的分析auto_increment值主从不一致现象,如果在此期间发生主从故障切换,问题当原来的分析slave节点变成了新的master节点,由于表的问题auto_increment值是小于原主库的,当业务继续写入时,分析就会收到主键冲突的问题报错提示。
相关报错信息如下:
! 报错提示
ERROR 1062 (23000): Duplicate entry XXX for key PRIMARY
1.2 影响评估在业务逻辑中使用了Replace into,分析或者INSERT...ON DUPLICATE KEY UPDATE。
一旦出现了表的问题auto_increment值主从不一致现象,在出现MySQL主从故障切换后,分析业务的问题正常写入会报主键冲突的错误,当auto_increment相差不多,b2b信息网分析或许在业务重试的问题时候会跳过报错,但是auto_increment相差较多时,会超出业务重试的次数,这样造成的影响会更大。
这里在测试环境中,搭建MySQL社区版 5.7 版本,一主一从的架构。
【OS】:CentOS Linux release 7.3
【MySQL】:社区版本 5.7
【主从架构】:一主一从
【库表信息】:库名:test2023
表名:test_autoincrement
表结构如下:
复制CREATE TABLE `test_autoincrement` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 自增主键, `name` varchar(100) NOT NULL DEFAULT test COMMENT 测试名字, `uid` int(11) NOT NULL COMMENT 测试表唯一键, PRIMARY KEY (`id`), UNIQUE KEY `uid` (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 1.2.3.4.5.6.7. 2.2 准备测试数据 复制MySQL [test2023]> insert into test_autoincrement(name,uid) select 张三,1001; Query OK, 1 row affected (0.08 sec) Records: 1 Duplicates: 0 Warnings: 0 MySQL [test2023]> insert into test_autoincrement(name,uid) select 李四,1002; Query OK, 1 row affected (0.06 sec) Records: 1 Duplicates: 0 Warnings: 0 MySQL [test2023]> MySQL [test2023]> insert into test_autoincrement(name,uid) select 王五,1003; Query OK, 1 row affected (0.08 sec) Records: 1 Duplicates: 0 Warnings: 01.2.3.4.5.6.7.8.9.10.11.12.正常情况下,插入一行数据,影响的行数是1。
此时查看主从节点表的autoincrement值,可以看到此时主从的AUTO_INCREMENT是一致的,香港云服务器都是4,即自增主键下一次申请的值是4。

2.3.1 模拟REPLACE INTO操作
复制MySQL [test2023]> REPLACE INTO test_autoincrement (name,uid) values(张三丰,1001); Query OK, 2 rows affected (0.01 sec)1.2.这里通过REPLACE INTO操作判断,如果存在唯一ID为1001的记录,那么将name字段的值更改为"张三丰",可发现此时影响的行数是2。现在我们再次查看主从节点表的autoincrement值。

此时出现了主从节点表的AUTO_INCREMENT不一致现象。
2.3.2 模拟主从切换
由于是在测试环境,这里就直接进行了主从关系的更改。
(1)停止当前slave节点的复制线程
复制MySQL [test2023]> stop slave; Query OK, 0 rows affected (0.08 sec)1.2.(2)查看当前slave节点的Executed_Gtid_Set值
复制MySQL [test2023]> show master status\G