Mysql-经典故障案例(1)-主从同步由于主键问题引发的故障

故障报错

Could not execute Write_rows event on table test.users; Duplicate entry '3' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000031, end_log_pos 329

这是由于从库存在与主库相同主键值,导致从库无法同步的报错,也是非常经典的同步报错,接下来让我们一起来实战演练一下!

一、故障模拟步骤

环境准备
  • 主库:IP 10.33.112.22,MySQL 5.7
  • 从库:IP 10.30.76.4,MySQL 5.7
  • 同步数据库test
  • 测试表users(结构如下)
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL
);

1 . 模拟数据不一致故障

  1. 主库插入数据

    -- 主库操作
    INSERT INTO test.users (name) VALUES ('Alice');
    INSERT INTO test.users (name) VALUES ('Bob');
    
  2. 从库手动篡改数据(模拟误操作)

    -- 从库操作(跳过主从同步,直接写数据)
    STOP SLAVE;  -- 临时停止复制
    INSERT INTO test.users (id, name) VALUES (3, 'Hacker'); -- 强制插入 id=3 的数据
    START SLAVE;  -- 重启复制
    
  3. 主库继续写入数据

    -- 主库操作
    INSERT INTO test.users (name) VALUES ('Charlie');  -- 该操作生成的id=3
    

3. 触发主从同步错误

此时主库将生成一条 id=3 的记录,但该事件在从库重放时,因从库的 AUTO_INCREMENT 计数器未更新,会发生以下错误:

-- 从库状态检查
SHOW SLAVE STATUS\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.100Master_User: replSlave_IO_Running: YesSlave_SQL_Running: No  -- SQL线程已停止Last_Error: Error 'Duplicate entry '2' for key 'PRIMARY'' on query...Last_Errno: 1062  -- 主键冲突错误

二、紧急处理办法

不推荐,可能会导致冲突的数据丢失,也就是在出库插入id=3的数据会丢失

什么是GTID

什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能。
GTID是事务提交时创建分配的唯一标识符,所有事务均与GTID一一映射。

  • 非GTID模式

    SET GLOBAL sql_slave_skip_counter = 1;  -- 跳过1个事件
    START SLAVE;
    
  • GTID模式(需指定GTID_NEXT)

    STOP SLAVE;
    SET GTID_NEXT='uuid:3';  -- 替换为SHOW SLAVE STATUS中报错的GTID
    BEGIN; 
    COMMIT;           -- 空事务跳过冲突GTID
    SET GTID_NEXT=AUTOMATIC;
    START SLAVE;
    

举例,通过show slave status\G 查看一下这行信息,那我们需要跳过的gtid就为8dcd492d-ce6b-11ef-9803-005056b388fd:36

 Retrieved_Gtid_Set: 8dcd492d-ce6b-11ef-9803-005056b388fd:31-36

二、修复数据

在从库使用((20250226135629-6ufo3yl “pt-table-sync”))工具,会自动将不一样的数据做修改

主库

mysql> select * from users;
+----+---------+
| id | name    |
+----+---------+
|  1 | Alice   |
|  2 | Bob     |
|  3 | Charlie |

从库

mysql> select * from users;
+----+--------+
| id | name   |
+----+--------+
|  1 | Alice  |
|  2 | Bob    |
|  3 | Hacker |
+----+--------+

使用pt-table-sync修复

pt-table-sync --execute  --sync-to-master h=10.30.76.4 --databases=test --tables=users --print --verbose --ask-pass

从库恢复

mysql> select * from users;
+----+---------+
| id | name    |
+----+---------+
|  1 | Alice   |
|  2 | Bob     |
|  3 | Charlie |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30402.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务保护:Sentinel

home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多,比如: 请求限流 线程隔离 服务熔断 服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发…

工作学习笔记:HarmonyOS 核心术语速查表(v14 实战版)

作为在 HarmonyOS 开发一线摸爬滚打的工程师,笔者在 v14 版本迭代中整理了这份带血的实战术语表。 一、架构基础术语速查 A 系列术语 术语官方定义笔者解读(v14 实战版)开发陷阱 & 解决方案abc 文件ArkCompiler 生成的字节码文件打包时…

驾校与无人机飞手培训机构合作开展低空业务技术详解

驾校与无人机飞手培训机构合作开展低空业务是一个创新的举措,旨在结合双方的资源和专业优势,为学员提供多元化的技能培训和业务拓展机会。以下是对这种合作模式下低空业务技术的详细解析: 一、合作背景与意义 1. 市场需求增长:随…

黄昏时间户外街拍人像Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 黄昏时分有着独特而迷人的光线,使此时拍摄的人像自带一种浪漫、朦胧的氛围 。通过 Lr 调色,可以进一步强化这种特质并根据不同的风格需求进行创作。Lr(Lightroom)作为专业的图像后期处理软件,提供了丰富的调色…

数据结构(队列)

数据结构(队列) 什么是队列? 队列和栈类似,也是一类特殊的线性表。特殊之处也是在于操作上。队列:只允许在一端进行插入数据操作(入队),在另一端进行删除数据操作(出队&…

DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)

DeepSeek R1-7B 医疗大模型微调实战全流程指南 目录 环境配置与硬件优化医疗数据工程微调策略详解训练监控与评估模型部署与安全持续优化与迭代多模态扩展伦理与合规体系故障排除与调试行业应用案例进阶调优技巧版本管理与迭代法律风险规避成本控制方案文档与知识传承1. 环境配…

[Lc7_分治-快排] 快速选择排序 | 数组中的第K个最大元素 | 库存管理 III

目录 1. 数组中的第K个最大元素 题解 代码 2.库存管理 III 代码 1. 数组中的第K个最大元素 题目链接:215. 数组中的第K个最大元素 题目分析: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要…

集合论--形式化语言里的汇编码

如果一阶逻辑是数学这门形式化语言里的机器码,那么集合论就是数学这门形式化语言里的汇编码。 基本思想:从集合出发构建所有其它。 构建自然数构建整数构建有理数构建实数构建有序对、笛卡尔积、关系、函数、序列等构建确定有限自动机(DFA) 全景图 常…

RuoYi框架添加自己的模块(学生管理系统CRUD)

RuoYi框架添加自己的模块(学生管理系统) 框架顺利运行 首先肯定要顺利运行框架了,这个我不多说了 设计数据库表 在ry数据库中添加表tb_student 表字段如图所示 如图所示 注意id字段是自增的 注释部分是后面成功后前端要展示的部分 导入…

MybatisPlus

1.增删改查入门案例&#xff1a; 首先导入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency> 然后这些增删改查…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、过滤器&…

服务器上通过ollama部署deepseek

2025年1月下旬&#xff0c;DeepSeek的R1模型发布后的一周内就火了&#xff0c;性能比肩OpenAI的o1模型&#xff0c;且训练成本仅为560万美元&#xff0c;成本远低于openAI&#xff0c;使得英伟达股票大跌。 下面我们来看下如何个人如何部署deepseek-r1模型。 我是用的仙宫云的…

点云软件VeloView开发环境搭建与编译

官方编译说明 LidarView / LidarView-Superbuild GitLab 我的编译过程&#xff1a; 安装vs2019&#xff0c;windows sdk&#xff0c;qt5.14.2&#xff08;没安装到5.15.7&#xff09;&#xff0c;git&#xff0c;cmake3.31&#xff0c;python3.7.9&#xff0c;ninja下载放到…

【Git】创建,切换分支

理解分支 这里开始介绍Git的杀手级功能之一&#xff1a;分支。 分支就是科幻电影里的平行宇宙&#xff0c;当你正在电脑前努力学习C的时候&#xff0c;另一个你正在另一个平行宇宙里努力学习JAVA。 如果两个平行宇宙互不干扰&#xff0c;那对现在的你也没啥影响。不过&#…

FPGA 实验报告:四位全加器与三八译码器仿真实现

目录 安装Quartus软件 四位全加器 全加器、半加器 半加器&#xff1a; 全加器&#xff1a; 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…

记录一次wifi版有人物联串口服务器调试经过

1、首先买了一个华为的wifi路由器&#xff0c;连接上以后&#xff0c;设置好网络名字和wifi密码 2、用网线连接串口服务器&#xff0c;通过192.168.1.1登录&#xff0c;进行配置 找到无线客户端配置&#xff0c;先在基本配置中打开5G配置&#xff0c;然后再去5.8G配置中设置 …

Vue3.5 企业级管理系统实战(八):Sidebar组件开发 2

本篇通过 Pinia 实现侧边栏&#xff08;Sidebar&#xff09;的展开收起功能&#xff0c;并通过 Pinia 实现展开状态的持久化。 1 安装 Pinia Persistedstate Pinia 是 Vue.js 的状态管理库&#xff0c;而 pinia-plugin-persistedstate 是一个针对 Pinia 的插件&#xff0c;它…

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…

vue3 vite项目安装eslint

npm install eslint -D 安装eslint库 npx eslint --init 初始化配置&#xff0c;按项目实际情况选 自动生成eslint.config.js&#xff0c;可以添加自定义rules 安装ESLint插件 此时打开vue文件就会标红有问题的位置 安装prettier npm install prettier eslint-config-pr…

【RocketMQ】二、架构与核心概念

文章目录 1、发布订阅模型2、角色3、工作流程4、RocketMQ的架构4.1 RocketMQ4.x版本4.2 RocketMQ5.0版本 1、发布订阅模型 几乎所有主流MQ产品&#xff0c;都是发布订阅模型&#xff08;Pub/Sub模型&#xff09;&#xff0c;是生产者和消费者进行基于主题Topic的消息传送 在这…