0

0

mysql执行SQL时主从复制流程有什么影响_mysql复制同步解析

P粉602998670

P粉602998670

发布时间:2026-03-08 09:53:57

|

948人浏览过

|

来源于php中文网

原创

只有修改数据的sql(如insert/update/delete/ddl)才会触发binlog写入,事务提交前mysql串行写入binlog再通知存储引擎提交,binlog与redo log通过xa协调保证一致性。

mysql执行sql时主从复制流程有什么影响_mysql复制同步解析

主库执行SQL后,binlog怎么被触发写入

不是所有SQL都会进binlog,只有实际修改数据的语句(INSERTUPDATEDELETEDDL等)才会被记录;SELECTSHOWSET这类不改数据的语句不会写入。关键点在于:事务提交前,MySQL就把变更事件串行写入binlog,再通知存储引擎提交——这意味着binlog和引擎层(如InnoDB)的日志(redo log)是两套独立日志,靠XA协调保证一致性。

常见误区:autocommit=0时,没显式COMMITbinlog就不会落盘;而autocommit=1下,每条DML自动成一个事务,立刻写binlog。如果主库崩溃在binlog写完但redo log未刷盘之间,从库可能多出一条“幻影事务”,这是异步复制固有风险。

从库SQL线程如何重放relay-log,为什么容易卡住

SQL Thread是单线程串行执行relay-log里所有事件的,哪怕主库是并行写入的10个事务,从库也得一个一个按序执行。这就是主从延迟(Seconds_Behind_Master > 0)最根本的原因。

  • 大事务(比如DELETE FROM huge_table WHERE ...)会阻塞后续所有事件执行,延迟飙升
  • 主库短平快的高并发写,在从库变成“长尾排队”,尤其遇到锁表、慢查询、磁盘I/O瓶颈时更明显
  • replicate_do_dbreplicate_ignore_table这类过滤规则会让SQL线程跳过某些事件,但位置指针仍推进,容易造成“跳过逻辑”和实际数据不一致

2025年起MySQL 8.0默认启用WRITESET并行复制(需binlog_transaction_dependency_tracking=WRITESET),能基于行级依赖判断哪些事务可并行回放——但前提是主库用的是ROW格式binlog,且事务不跨库操作。

Clipfly
Clipfly

一站式AI视频生成和编辑平台,提供多种AI视频处理、AI图像处理工具。

下载

主从延迟对应用读取的直接影响

应用连从库做SELECT时,如果没做任何延迟感知,很可能读到“过期数据”。比如下单成功(主库已写入),立刻查订单列表(连了从库),却返回空——这不是bug,是复制机制决定的。

  • 业务强一致性读(如刚写完就查)必须走主库,或加SELECT ... FOR UPDATE强制主库路由
  • 中间件(如ShardingSphere、MyCat)的读写分离策略若没配置maxReplicationLag阈值,会把请求发给延迟2分钟的从库
  • show slave status\G里的Seconds_Behind_Master是估算值,实际延迟可能更大(尤其当SQL线程正在执行一个大事务时,该值会冻结不动)

真正要监控的不是这个字段,而是Relay_Log_PosRead_Master_Log_Pos的差值——它反映I/O线程拉了多少日志还没被SQL线程消费,更接近真实积压量。

为什么reset master在从库上执行会彻底断掉复制

reset master清空主库所有binlog文件,并重置mysql-bin.000001,但不会通知从库。从库的IO Thread还在按旧的Master_Log_FileMaster_Log_Pos去拉日志,结果得到Could not find first log file name in binary log index file错误,复制中断。

  • 误操作后不能靠CHANGE MASTER TO硬切新日志名——因为旧事务已丢失,强行继续会导致主从数据不一致
  • 正确做法是重新做一次全量同步:mysqldump --single-transaction --master-data=2导出+恢复,再CHANGE MASTER TO指向dump中记录的位置
  • 生产环境应禁用reset master权限,或通过sql_log_bin=0临时关闭当前会话的binlog写入来规避风险

真正难处理的不是流程本身,而是复制链路上每个环节都可能“静默失败”:网络抖动让IO Thread断连却不报错、磁盘满导致relay-log写不进去、甚至slave_skip_errors跳过主键冲突后,后续更新直接错位——这些细节比原理更消耗排查时间。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1110

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

380

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2069

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

379

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1622

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

439

2024.04.29

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 845人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号