首页/新闻资讯/正文详情

从异步复制到MGR:MySQL复制机制的三层演进与选型框架

发布时间:2026/9/24 15:01:29 来源:云帆数科 栏目:资讯中心
从异步复制到MGR:MySQL复制机制的三层演进与选型框架
大家好我是小耶写功课只是为了我踩过的坑你们别再踩了MySQL的主从复制是最常用的高可用方案但默认的异步复制有一个硬伤主库写完即返回成功binlog还没传到从库时主库宕机这部分数据就丢了。半同步复制解决了这个问题——主库等待至少一个从库确认收到binlog后才返回。但半同步复制有两种等待模式选错了照样丢数据。今天把MySQL复制这件事从基础到深入彻底讲清楚。一、先搞清楚几个核心概念Binlog二进制日志MySQL Server层的日志记录所有数据变更操作INSERT、UPDATE、DELETE等。Binlog以事件为单位每个事件描述一个变更。它是主从复制的数据来源——从库通过读取主库的Binlog来同步数据。Relay Log中继日志从库上的日志。从库的I/O线程从主库拉取Binlog后先写入本地的Relay Log再由SQL线程读取Relay Log并重放。Relay Log相当于Binlog在从库上的中转站。主库Master接受写入操作的数据库实例产生Binlog。从库Slave/Replica通过复制主库的Binlog来同步数据的数据库实例。ACK确认从库收到Binlog后向主库发送的确认信号。半同步复制依赖ACK来判断从库是否已收到数据。SCNSystem Change Number数据库系统的变更号用于精确标识数据库在某个时间点的状态。在Oracle迁移场景中SCN是增量同步的起始点。GTIDGlobal Transaction Identifier全局事务标识符格式为server_uuid:transaction_id每个事务在提交时被分配一个全局唯一的GTID。二、异步复制基本流程与结构性问题异步复制是MySQL默认的复制模式。它的工作流程分三步第一步主库执行事务写Binlog存储引擎提交返回客户端成功。第二步从库的I/O线程连接主库请求从指定位置开始的Binlog。主库的Dump线程读取Binlog并发送给从库。从库I/O线程收到后写入本地的Relay Log。第三步从库的SQL线程读取Relay Log重放其中的事件更新从库数据。异步复制的核心问题是数据丢失风险。主库写完Binlog就返回客户端成功完全不等待从库确认。如果主库在Binlog发送到从库之前宕机这部分事务在从库上不存在。故障切换后主库上已提交的数据在从库上消失了。这个问题的本质是异步复制的“复制”是一个后台过程与主库的事务提交没有同步关系。三、半同步复制两种等待模式半同步复制在异步复制的基础上增加了一个等待环节主库在返回客户端之前等待至少一个从库确认收到Binlog。但“等待”发生在哪个环节直接决定了故障切换时的数据一致性。MySQL 5.7引入了rpl_semi_sync_master_wait_point参数控制这个时机。AFTER_COMMIT模式MySQL 5.6默认的执行顺序是主库写Binlog → 主库存储引擎提交 → 发送Binlog到从库 → 等待从库ACK → 返回客户端。问题出在第三步和第四步之间。主库已经提交了事务其他客户端能看到这个事务的结果。但Binlog可能还没传到从库。故障切换到从库后这个事务在从库上不存在——其他客户端在主库上看到的数据在从库上消失了。AFTER_SYNC模式MySQL 5.7默认把存储引擎的提交推迟到了ACK之后主库写Binlog → 发送Binlog到从库 → 等待从库ACK → 主库存储引擎提交 → 返回客户端。主库在等到从库确认之前事务在存储引擎层面还未提交。其他客户端看不到这个事务的结果。主库宕机时事务要么在从库上存在ACK已发出要么在主库上也不存在ACK未发出——两端数据始终一致。AFTER_SYNC模式解决的是主库崩溃时其他客户端看到的数据与从库不一致的问题。这也是MySQL 5.7之后默认使用AFTER_SYNC的原因。四、MGR基于Paxos的自动选主与脑裂防护半同步复制解决了数据丢失风险但故障切换仍然需要人工介入。MySQL Group ReplicationMGR在5.7.17引入目标是实现自动选主和故障自愈。MGR的核心是分布式状态机复制——组内所有服务器就数据库状态变更达成一致。每个事务在提交前必须经过组内多数节点的认证和排序。这意味着MGR不依赖Binlog的异步传播而是通过组通信协议保证数据一致性。MGR的核心技术是Paxos算法的实现。Paxos充当组通信引擎提供故障检测、组成员关系和全序消息传递。事务的提交顺序由组内多数节点投票决定保证所有节点以相同顺序应用事务。MGR支持两种运行模式单主模式只有一个节点接受写入系统自动选举主节点。主节点宕机后组内自动选举新的主节点无需人工介入。适合大多数生产场景。多主模式所有节点都可以接受写入。但多主模式对应用层有额外要求——并发写入可能产生冲突需要应用层处理。适合对写入扩展要求极高的场景。MGR内置了脑裂保护机制。如果网络分区导致组内成员无法达成多数一致系统在问题解决之前不会继续处理事务。这种保护保证了数据不会因为网络问题而在两个分区上分别写入、产生冲突。五、GTID让主从切换不再依赖手工位点传统复制依赖Binlog文件名和位点来定位同步位置。主从切换时DBA需要手动查找从库的同步位点操作复杂且容易出错。GTID解决了这个问题。每个事务在提交时被分配一个全局唯一的GTID格式是server_uuid:transaction_id。从库记录已执行的GTID集合主从切换后从库会自动跳过已执行的GTID只同步缺失的事务。GTID的核心价值是自动定位。不再需要手动指定MASTER_LOG_FILE和MASTER_LOG_POS从库通过GTID集合判断自己缺哪些事务自动向新主库请求。GTID的启用需要按顺序切换gtid_mode不能直接跳变。gtid_mode有四个值OFF只能复制匿名事务、OFF_PERMISSIVE新事务匿名可复制GTID或匿名、ON_PERMISSIVE新事务GTID可复制GTID或匿名、ON所有事务必须GTID。在线切换必须按OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON的顺序逐步过渡。生产环境的最佳实践是从一开始就启用GTID。故障切换变得可靠新副本创建不再是麻烦事缺失的事务可以快速定位。六、三种复制模式怎么选复制模式数据一致性RTO适用场景异步复制可能丢数据分钟级需人工切换非核心业务、日志同步半同步复制不丢数据AFTER_SYNC分钟级需人工切换大多数生产业务MGR不丢数据 自动选主秒级核心交易、金融级高可用选型建议非核心业务用异步复制或半同步复制核心业务用MGR单主模式已经部署了半同步复制但希望减少人工切换的可以逐步迁移到MGR。七、小结MySQL复制的三层机制解决的是三个不同层面的问题。异步复制提供了基础的复制能力但存在数据丢失风险半同步复制的AFTER_SYNC模式解决了主库崩溃时的数据一致性问题MGR的Paxos协议解决了自动选主和脑裂防护问题GTID解决了主从切换时的手工位点问题。生产环境的最佳实践是用GTID做基础用AFTER_SYNC半同步做数据保障核心系统升级到MGR。小耶在手SQL 不愁还有什么想了解的欢迎留言小耶一定知无不言言无不尽……我们下次见~

相关推荐

单片机毕设项目:基于 STM32 或 51 单片机的蓝牙 APP 联动智能温控风扇设计 基于 STM32 或 51 单片机的人体感应与语音交互风扇系统开发(025508)
单片机毕设项目:基于 STM32 或 51 单片机的蓝牙 APP 联动智能温控风扇设计 基于 STM32 或 51 单片机的人体感应与语音交互风扇系统开发(025508)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️… · 2026/9/24 15:01:16

Agenda 修复循环任务退避重试计数残留:成功运行后重置 failCount 的机制与实践
Agenda 修复循环任务退避重试计数残留:成功运行后重置 failCount 的机制与实践

Agenda 修复循环任务退避重试计数残留:成功运行后重置 failCount 的机制与实践 【免费下载链接】agenda Lightweight job scheduling for Node.js 项目地址: https://gitcode.com/gh_mirrors/ag/agenda 导读 本文围绕 Agenda(Node.js 轻量级任务… · 2026/9/24 15:01:16

HyperDX 架构深度解析:从 OpenTelemetry 采集到 ClickHouse 查询的完整体系
HyperDX 架构深度解析:从 OpenTelemetry 采集到 ClickHouse 查询的完整体系

可观测性云原生运维 【免费下载链接】hyperdx Resolve production issues, fast. An open source observability platform unifying session replays, logs, metrics, traces and errors powered by ClickHouse and OpenTelemetry. 项目地址: https://gitcode.com/g… · 2026/9/24 15:01:10

django CMS 组合架构解析:内容对象、插件与 Apphook 三大积木如何构成一个站点
django CMS 组合架构解析:内容对象、插件与 Apphook 三大积木如何构成一个站点

CMS后端 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms 点击查看 免费下载 django CMS 站点由三类构建块拼装而成:内容对象&#xf… · 2026/9/24 15:31:54

牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践
牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践

牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目… · 2026/9/24 15:31:54

AZ-104备考PDF全攻略:查看、打印、标注与版本核对指南
AZ-104备考PDF全攻略:查看、打印、标注与版本核对指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:31:54

Financing | 为什么黄金能保值?
Financing | 为什么黄金能保值?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:31:54

2026企业AI办公工具选型指南:框架、平台盘点与落地场景
2026企业AI办公工具选型指南:框架、平台盘点与落地场景

企业引入AI办公工具时,很容易陷入以功能清单判断产品价值的误区。不少管理者会横向罗列各家平台的能力项,用功能数量多少作为取舍依据,或是单纯以采购成本、品牌声量决定选型方向。这种评估方式容易造成AI工具上线之后,难以融入现… · 2026/9/24 15:31:47

Hive Web Scrape Tool 深度指南:基于 Playwright Stealth 的无头浏览器网页内容提取与 SSRF 防护
Hive Web Scrape Tool 深度指南:基于 Playwright Stealth 的无头浏览器网页内容提取与 SSRF 防护

人工智能AI Agent多智能体MCP 服务工具调用浏览器控制 【免费下载链接】hive Multi-Agent Harness for Production AI 项目地址: https://gitcode.com/gh_mirrors/hive48/hive 点击查看 免费下载 导读 web_scrape 是 Hive 多 Agent 生产框架(hive_tool… · 2026/9/24 15:31:35

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码