MySQL 主从 AUTO_INCREMENT 不一致问题分析

IT科技类资讯2025-11-05 09:20:0364257

一、问题问题描述

1.1 问题现象

在 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相差不多,企商汇分析或许在业务重试的问题时候会跳过报错,但是auto_increment相差较多时,会超出业务重试的次数,这样造成的影响会更大。

二、问题复现

2.1 环境搭建

这里在测试环境中,搭建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是一致的,云南idc服务商都是4,即自增主键下一次申请的值是4。

2.3 问题复现模拟

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
本文地址:http://www.bzve.cn/news/515e2599459.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

解决宽带错误651调制解调器问题的有效方法(解决宽带错误651的实用技巧和技术指导)

新手要怎么评估一个域名价值?有什么方法?

人们理解的三拼域名是什么?三拼域名在当下价值如何?

国别域名是好域名吗?新手该如何获取国别域名?

深度U启大师使用教程(轻松提升电脑性能,解决系统卡顿问题)

网站更换新域名注意什么?有什么细节?

域名投资要知道什么基础知识?

域名注册的常见问题有哪些?怎么解决这些问题?

友情链接

滇ICP备2023006006号-39