MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!

MySQL「主从不一致」最常见的成因、快速定位思路以及可落地的修复手段

一、为什么会不一致?14 类高频场景

类别典型表现/触发条件快速自检命令/日志
1. 从库被写入业务或 DBA 直连从库 UPDATE/INSERTSHOW VARIABLES LIKE 'read_only' 应为 ON
2. 复制过滤规则主从 binlog-ignore-db / replicate-do-table 不一致比对 my.cnf 过滤规则
3. 非 ROW 格式STATEMENTUUID()NOW() 等不确定函数SHOW VARIABLES LIKE 'binlog_format'
4. 异常宕机主库 crash 瞬间事务未落盘;从库 relay-log 损坏错误日志出现 Relay log read failure
5. 从库断电relay log 截断 → SQL 线程报错 1594SHOW SLAVE STATUSLast_Errno=1594
6. 网络丢包I/O 线程反复重连,少拉日志Slave_IO_Running=NoLast_IO_Error 提示网络
7. 主从版本差异高版本主库语法在低版本从库不支持比对 SELECT VERSION()
8. sql_mode 不一致严格模式主库插入成功,从库失败SHOW VARIABLES LIKE 'sql_mode'
9. server-id 冲突环形/链式复制时事件被循环过滤SHOW VARIABLES LIKE 'server_id'
10. 自增步长问题双主/多主写入产生重复 PKauto_increment_increment ≠1
11. 大事务+延迟从库落后几小时,业务已删除主库数据Seconds_Behind_Master 持续增大
12. 备份恢复方式错误mysqldump 未加 --single-transaction --master-data=2检查备份脚本
13. 存储过程/触发器从库缺少对应 routine 或触发器行为不同SHOW PROCEDURE STATUS
14. MySQL Bug8.0.27 之前函数索引、JSON 查询触发 assertbugs.mysql.com + assert 文件名

二、快速定位三步走(5 分钟)

2.1. 看状态

SHOW SLAVE STATUS\G

关注 4 个核心字段:
Slave_IO_Running | Slave_SQL_Running | Last_Error | Seconds_Behind_Master

2.2. 看日志

tail -n 200 /var/log/mysqld.log | grep -E "Error|Assert|1032|1062|1594"

1032=记录不存在,1062=主键冲突,1594=relay-log 损坏

2.3. pt-table-checksum(可选)

不会可以这个工具评论区告诉我

pt-table-checksum \
--no-check-binlog-format \
--nocheck-replication-filters \
--replicate=ptdb.checksums \
--databases=wewindb \
--tables=test1 \
--recursion-method=dsn=D=ptdb,t=dsns \
h=10.20.17.101,u=root,p=root,P=3306

不一致的表会在 percona.checksums 中生成 diff 记录。

三、修复方案选择矩阵

场景推荐方案停机需求速度备注
仅个别表/少量行pt-table-sync0分钟级checksumsync
单表大量不一致重建该表低(可在线导出)10~30 minmysqldump --single-transaction + source
多表/整库错乱重做从库xtrabackup 流式重建最稳
relay-log 损坏自动恢复0秒级STOP SLAVE; SET GLOBAL relay_log_recovery=1; START SLAVE;
1032/1062 报错跳过或补数据0秒级SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 仅应急

说明:
MySQL 8.0.22 开始,使用 STOP REPLICA 来代替 STOP SLAVE,后者现在已被弃用。 在 MySQL 8.0.22 之前的版本中,请使用 STOP SLAVE。

四、预防措施(生产必做)

4.1. 从库只读

read_only=1
super_read_only=1   # 8.0+

4.2. 复制信息落表

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=1

4.3. 格式与一致性

binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON

4.4. 定期校验

每月低峰期跑 pt-table-checksum,差异写入报警。

4.5. 版本策略

主从同版本 ≥ 8.0.35,避免 8.0.27 之前已知 assert 触发场景(函数索引、JSON MEMBER OF)。

五、结论

出现主从不一致,先读 SHOW SLAVE STATUS 和错误日志 → 用 pt-table-checksum 检查 → 能用 pt-table-sync 就不同步整库;如果修复不了主从不一致,那重做吧, xtrabackup或者mysqldump 重做从库。

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

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

相关文章

AI 网站源码:探秘 SUNO,革新音乐创作的 AI 先锋

在当今数字化浪潮中,人工智能(AI)正深刻地重塑各个领域,音乐创作也不例外。SUNO 作为一款引领潮流的音乐生成工具,宛如一颗璀璨新星,在音乐创作的天空中熠熠生辉,为音乐爱好者和创作者们带来了前…

Linux:malloc背后的实现细节

目录前言一、先搞懂基础:程序的内存布局(关键前提!)二、malloc的核心实现步骤(4层架构拆解)第1层:用户调用 → 标准库处理(glibc的malloc.c)第2层:堆内存池管…

什么是X11转发?

X11 转发(X11 forwarding,ssh -X)是一种 SSH 协议功能,它允许用户在远程服务器上运行图形化应用程序,并通过本地的显示设备和输入输出设备与这些程序进行交互。它被开发者广泛使用,用于在大规模、异构的服务…

Android Kotlin 动态注册 Broadcast 的完整封装方案

在 Kotlin 中封装动态注册的 Broadcast 可以让你更优雅地管理广播的注册和注销,避免内存泄漏。下面是一个完整的封装方案: 基础封装类 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改进(8):融合Self-Attention的CNN架构

1. 自注意力机制简介自注意力机制是Transformer架构的核心组件,它能够计算输入序列中每个元素与其他所有元素的相关性。与CNN的局部感受野不同,自注意力机制允许模型直接建立远距离依赖关系,从而捕获全局上下文信息。在计算机视觉中&#xff…

ES6 面试题及详细答案 80题 (33-40)-- Symbol与集合数据结构

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

PG-210-HI 山洪预警系统呼叫端:筑牢山区应急预警 “安全防线”

在山洪灾害多发的山区,及时、准确的预警信息传递是保障群众生命财产安全的关键。由 PG-210-HI 型号构成的山洪预警系统呼叫端主机,凭借其全面的功能、先进的特性与可靠的性能,成为连接管理员与群众的重要应急枢纽,为山区构建起一道…

研学旅游产品设计实训室:赋能产品落地,培养实用人才

1. 研学旅游产品设计实训室的定位与功能 研学旅游产品设计实训室是专门为学生提供研学课程与产品开发、模拟设计、项目推演、成果展示等实践活动的教学空间。该实训室应支持以下功能: 研学主题设计与目标制定; 课程内容与学习方法的选择与整合&#xf…

4215kg轻型载货汽车变速器设计cad+设计说明书

第一章 前言 3 1.1 变速器的发展环绕现状 3 1.2 本次设计目的和意义 4 第二章 传动机构布置方案分析及设计 5 2.1 传动机构结构分析与类型选择 5 2.2变速器主传动方案的选择 5 2.3 倒档传动方案 6 2..4 变速器零、部件结构方案设计 6 2.4.1 齿轮形式 …

9月10日

TCP客户端代码#include<myhead.h> #define SER_IP "192.168.108.179" //服务器&#xff49;&#xff50;地址 #define SER_PORT 8888 //服务器端口号 #define CLI_IP "192.168.108.239" //客户端&#xff49;&#xff50;地址 …

案例开发 - 日程管理 - 第七期

项目改造&#xff0c;进入 demo-schedule 项目中&#xff0c;下载 pinia 依赖在 main.js 中开启 piniaimport { createApp } from vue import App from ./App.vue import router from ./router/router.js import {createPinia} from pinialet pinia createPinia() const app …

infinityfree 网页连接内网穿透 localtunnel会换 还是用frp成功了

模型库首页 魔搭社区 fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. 我尝试用本机ipv6&#xff0c;失败了 配置文件 - ChmlFrp 香港2才能用 只支持https CNAME解析 | 怊猫科技 | 文档 How to create …

批量更新数据:Mybatis update foreach 和 update case when 写法及比较

在平常的开发工作中&#xff0c;我们经常需要批量更新数据&#xff0c;业务需要每次批量更新几千条数据&#xff0c;采用 update foreach 写法的时候&#xff0c;接口响应 10s 左右&#xff0c;优化后&#xff0c;采用 update ... case when 写法&#xff0c;接口响应 2s 左右。…

Java基础篇04:数组、二维数组

1 数组 数组是一个数据容器&#xff0c;可用来存储一批同类型的数据。 1.1 数组的定义方式 静态初始化 数据类型[][] 数组名 {元素1&#xff0c;元素2&#xff0c;元素3}; string[][] name {"wfs","jsc","qf"} 动态初始化 数据类型[][] 数组名…

unity开发类似个人网站空间

可以用 Unity 开发 “个人网站空间” 类工具&#xff0c;但需要结合其技术特性和适用场景来判断是否合适。以下从技术可行性、优势、局限性、适用场景四个方面具体分析&#xff1a;一、技术可行性Unity 本质是游戏引擎&#xff0c;但具备开发 “桌面应用” 和 “交互内容” 的能…

SDK游戏盾如何实现动态加密

SDK游戏盾的动态加密体系通过​​密钥动态管理、多层加密架构、协议混淆、AI自适应调整及设备绑定​​等多重机制协同作用&#xff0c;实现对游戏数据全生命周期的动态保护&#xff0c;有效抵御中间人攻击、协议破解、重放攻击等威胁。以下从核心技术与实现逻辑展开详细说明&am…

TensorFlow平台介绍

什么是 TensorFlow&#xff1f; TensorFlow 是一个由 Google Brain 团队 开发并维护的 开源、端到端机器学习平台。它的核心是一个强大的数值计算库&#xff0c;特别擅长于使用数据流图来表达复杂的计算任务&#xff0c;尤其适合大规模机器学习和深度学习模型的构建、训练和部署…

TENGJUN防水TYPE-C连接器:立贴结构与IPX7防护的精密融合

在户外电子、智能家居、车载设备等对连接可靠性与空间适配性要求严苛的场景中&#xff0c;连接器不仅是信号与电力传输的“桥梁”&#xff0c;更需抵御潮湿、粉尘等复杂环境的侵蚀。TENGJUN防水TYPE-C连接器以“双排立贴”为核心设计&#xff0c;融合锌合金底座、精准尺寸控制与…

Spring Boot + Vue 项目中使用 Redis 分布式锁案例

加锁使用命令&#xff1a;set lock_key unique_value NX PX 1000NX:等同于SETNX &#xff0c;只有键不存在时才能设置成功PX&#xff1a;设置键的过期时间为10秒unique_value&#xff1a;一个必须是唯一的随机值&#xff08;UUID&#xff09;&#xff0c;通常由客户端生成…

微信小程序携带token跳转h5, h5再返回微信小程序

需求: 在微信小程序内跳转到h5, 浏览完后点击返回按钮再返回到微信小程序中 微信小程序跳转h5: 微信小程序跳转h5,这个还是比较简单的, 但要注意细节 一、微信小程序代码 1.新建跳转h5页面, 新建文件夹,新建page即可 2.使用web-view标签 wxml页面 js页面 到此为止, 小程序…