在互联网应用不断发展的二十多年里,MySQL 一直是最广泛使用的开源关系型数据库之一。它凭借开源、轻量、灵活的优势,支撑了无数网站、移动应用和企业系统。支撑 MySQL 长期发展的关键之一,就是 复制(Replication)技术

复制机制不仅用于 读写分离,还广泛应用于 高可用、容灾备份、分布式架构。本文将详细回顾 MySQL 复制技术的发展历程,结合实际生产应用分析其意义,并对安全性进行客观星级评比。


一、单机时代与最初的主从复制(基于语句的复制)

技术背景

在 2000 年前后,互联网业务还处于起步阶段,大多数系统访问量有限,一台 MySQL 单机即可满足。但随着门户网站、早期电商的兴起,读请求和写请求的压力不断上升,单机架构逐渐捉襟见肘。

技术实现

MySQL 在3.23(2001 年)首次引入了 主从复制(Master-Slave Replication),工作流程如下:

  1. 主库将所有写入操作记录到 二进制日志(binlog)

  2. 从库的 IO 线程从主库拉取 binlog,写入 中继日志(relay log)

  3. 从库的 SQL 线程顺序执行 relay log 中的语句,重放主库操作。

默认复制模式为 基于语句的复制(Statement-Based Replication, SBR),即直接把 SQL 语句写入 binlog 并在从库执行。

应用场景

  • 读多写少的 新闻门户社区论坛:读请求走从库,写请求走主库。

  • 早期电商的 商品浏览库存更新场景:大多数读流量分摊到多个从库。

意义

  • 以极低的成本实现了 水平扩展(增加从库即可分担读压力)。

  • 奠定了互联网应用架构中 读写分离 的雏形。

不足

  • 对非确定性语句(如 NOW()RAND())存在 重放歧义,导致主从数据不一致。

  • 主从延迟在高并发场景下仍可能积累。


二、行级复制(Row-Based Replication, RBR)

技术背景

随着业务复杂化,SBR 的数据一致性问题暴露越来越多,尤其在金融、电商支付等场景下,任何数据不一致都可能导致严重事故。

技术实现

MySQL 5.1(2008 年)**引入 RBR,binlog 不再记录 SQL,而是记录 行数据的变更结果

  • SBR:记录语句 UPDATE user SET balance=balance+100 WHERE id=1;

  • RBR:记录变更行 id=1,旧值=500,新值=600

应用场景

  • 支付、金融:账户余额必须绝对一致。

  • 库存管理:电商大促期间,库存扣减的准确性直接影响发货与售后。

意义

  • 有效解决了 SBR 的一致性问题,实现了 强一致复制

  • 支持更复杂的语句,业务对数据准确性更有保障。

不足

  • binlog 体积更大,存储与传输开销增加。

  • 对大批量更新,RBR 性能可能显著下降。


三、混合复制(Mixed-Based Replication, MBR)

技术背景

单纯使用 RBR,日志量过大,性能不佳;单纯使用 SBR,又有一致性隐患。于是 MySQL 在 5.1 中同时推出 混合复制模式(MBR)

技术实现

  • 普通的确定性语句 → 使用 SBR,提高性能。

  • 非确定性、存在歧义的语句 → 使用 RBR,保证一致性。

应用场景

  • 电商网站:商品浏览、大批量商品更新场景用 SBR;库存扣减、订单支付用 RBR。

  • 内容分发平台:大规模数据同步时更灵活。

意义

  • 效率与一致性之间找到平衡,适合大部分互联网中型业务。

不足

  • 自动选择机制并不总是“最优”,有时仍需人工配置。


四、并行复制(Parallel Replication)

技术背景

随着互联网进入 移动互联网和大数据时代(2010s),主库 QPS 可达数万,但从库单线程回放却跟不上,导致 主从延迟数十秒甚至数分钟,无法满足实时性需求。

技术实现

  • 5.6(2013):库级并行复制,不同数据库的事务可并行执行。

  • 5.7(2015):基于组提交的并行复制,同一库中不同事务可并行。

  • 8.0(2018):基于 Write Set,利用事务写集合判断是否冲突,实现接近主库的并行度。

应用场景

  • 电商大促:秒杀期间主库高并发写入,从库延迟必须缩小到毫秒级,才能快速切换。

  • 金融系统:实时交易要求从库与主库几乎同步。

意义

  • 极大缩短了主从延迟,使 高可用架构真正可用。

  • 提升了 容灾切换 的可靠性。

不足

  • 并行度受限于事务冲突,如果业务逻辑高度集中,效果有限。


五、全局事务 ID(GTID)与自动故障转移

主库与多个从库之间,通过 GTID 实现事务标识传播和追踪的架构

技术背景

在早期 MySQL 架构中,主从切换必须人工定位 binlog 文件名和位置,繁琐且容易出错,严重时会导致数据丢失。

技术实现

MySQL 5.6 引入 GTID(Global Transaction Identifier),每个事务生成唯一标识。

  • 主从切换时,无需关心 binlog 文件位置,只需比对 GTID 集合。

  • 自动化工具(如 MHA、Orchestrator)可据此快速完成切换。

应用场景

  • 高可用架构:互联网金融、电商平台需要快速主从切换。

  • 云数据库:自动化容灾切换的核心机制。

意义

  • 显著降低了人工失误风险。

  • 推动了 MySQL 自动化高可用 的发展。

不足

  • 本身不提高一致性,仍依赖复制模式(SBR/RBR)。


六、组复制与 InnoDB Cluster

Group Replication 插件的模块结构,包括通信层、插件接口等内部流程
传统主从(Primary-Backup)与组复制的消息流与一致性机制对比

技术背景

进入 云计算时代(2016+),企业对数据库的需求已不只是扩展性,还需要 分布式一致性自动高可用

技术实现

  • 组复制(Group Replication, GR):基于 Paxos/Raft 协议,事务提交需获得多数节点确认。

  • InnoDB Cluster:官方高可用集群方案,集成组复制、MySQL Router、Shell 管理工具。

应用场景

  • 金融支付系统:保障交易的强一致性和自动容灾。

  • 电商大促:保证在节点宕机时快速恢复,业务不中断。

  • IoT/实时采集:海量并发写入场景下仍保证一致性。

意义

  • 标志着 MySQL 从 单机复制 走向 分布式一致性集群

  • 为传统企业和云厂商提供了官方级高可用解决方案。

不足

  • 架构和管理复杂度显著上升。

  • 吞吐量相比异步复制有所牺牲。


七、安全性评比

不同复制技术在数据一致性、容错能力、防丢失风险上有明显差异:

技术阶段安全性星级评语
语句复制(SBR)★★☆☆☆高效,但易出现不一致,适合安全性要求低的读写分离。
行级复制(RBR)★★★★☆强一致性,金融/支付首选,但日志开销大。
混合复制(MBR)★★★☆☆折中方案,整体安全性中等。
并行复制★★★★☆缩短延迟,降低风险,但仍依赖底层复制模式。
GTID 复制★★★★☆简化主从切换,减少运维错误,提升安全性。
组复制 & InnoDB Cluster★★★★★内置一致性协议,支持冲突检测与自动选主,是最高等级的安全方案。

八、总结

  • 2000s:SBR → RBR —— 从低成本扩展到数据一致性保障

  • 2010s:并行复制 + GTID —— 缓解延迟瓶颈,提升高可用性

  • 2020s:组复制/InnoDB Cluster —— 迈向分布式强一致与自动容灾

可以说,MySQL 复制技术的发展史,就是互联网架构在 扩展性 — 一致性 — 高可用 三个维度不断进化的缩影。

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

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

相关文章

C++从字符串中移除前导零

该程序用于去除字符串开头的零字符。当输入"0000123456"时,程序会输出"123456"。核心函数removeZero()通过while循环找到第一个非零字符的位置,然后使用erase()方法删除前面的所有零。主函数读取输入字符串并调用该函数处理。程序简…

【面试题】C++系列(一)

本专栏文章持续更新,新增内容使用蓝色表示。C面向对象的三大特性:封装,继承,多态(1)封装是将数据和函数组合到一个类里。主要目的是隐藏内部的实现细节,仅暴露必要的接口给外部。通过封装&#…

当没办法实现从win复制东西到Linux虚拟机时的解决办法

① 先确认是否已安装bash复制sudo apt list --installed | grep open-vm-tools如果 没有任何回显 → 没装,跳到 ③如果看到 open-vm-tools 已安装 → 继续 ②② 启动正确的服务(单词别打错)bash复制systemctl status vmtoolsd # 查看…

用Markdown写自动化用例:Gauge实战全攻略!

你作为一名自动化测试工程师,正在为一个复杂的Web应用编写测试脚本:传统工具要求写大量代码,维护起来像解谜游戏,团队非技术成员完全插不上手。这时,Gauge这个“自动化神器”如魔法般出现——它允许用Markdown写可读的…

Unity开发保姆级教程:C#脚本+物理系统+UI交互,3大模块带你通关游戏开发

文章目录基础概念Unity开发环境搭建版本选择:为什么2021 LTS是最佳起点?三步安装:从下载到项目创建界面认知:5分钟掌握核心操作区配置优化:让开发更顺畅验证环境:创建你的第一个CubeC#基础语法与Unity脚本结…

Depth Anything V2论文速读

这篇论文主要讲了两方面1.为了解决模型在正常标注的现实图像上训练的缺陷问题、提出了新的模型训练数据和训练方法真实标记图像存在缺点:标签噪声(深度传感器可能存在空洞、玻璃等物体反射导致精度不准确)、标签细节粗糙(深度图边…

数据库原理及应用_数据库管理和保护_第5章数据库的安全性_理论部分

前言 "<数据库原理及应用>(MySQL版)".以下称为"本书"中第5章前6节内容 引入 数据库的安全性是非常重要的,表现在两个方面:一数据的访问权限,二数据的物理安全.本书在这一章前6节基本上都是理论性的内容,选择其中重要部分进行解读. 5.1数据库安全性…

QT6 配置 Copilot插件

下载项目&#xff1a;解压 GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot Node.js必须安装 Node.js — Download Node.js 例如先安装一个qt6 ,qt Cteatror选择新版本的 设置 效果&#xff0c;注释里面写要求&#xff0c;tab同意 #include "mainwindow…

ArcGIS学习-15 实战-建设用地适宜性评价

选定参评因子 高程坡度河流道路土地利用 确定因子分析标准 以下仅参数仅做展示&#xff0c;并非合理的数值 高程 0-100m&#xff1a;100 分&#xff0c;此高程范围通常地势较为平坦&#xff0c;建设成本相对较低&#xff0c;适宜建设。100-200m&#xff1a;70 分&#xff…

[C/C++学习] 7.“旋转蛇“视觉图形生成

参考文献: 童晶. C和C游戏趣味编程[M].人民邮电出版社.2021. 一.弧度制和角度制的转换 弧度制数值和角度对应表: (PI为圆周率&#xff0c;值为3.1415926)弧度制角度制00PI/630PI/360PI/2902*PI/3120PI1802*PI360二.扇形的绘制 easyx的solidpie( )函数用于在一个矩形区域内绘制…

自然语言处理之PyTorch实现词袋CBOW模型

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词向量&#xff08;Word Embedding&#xff09;是将文本转换为数值向量的核心技术。它能让计算机“理解”词语的语义关联&#xff0c;例如“国王”和“女王”的向量差可能与“男人”和“女人”的向量差相似。而Word2…

TCP, 三次握手, 四次挥手, 滑动窗口, 快速重传, 拥塞控制, 半连接队列, RST, SYN, ACK

目录 TCP 是什么&#xff1a;面向连接 可靠 字节流三次握手&#xff1a;为什么不是两次四次挥手与 TIME_WAIT&#xff1a;谁等谁序列号/确认号与去重、排序、确认重传机制&#xff1a;超时重传与快速重传滑动窗口与流量控制拥塞控制&#xff1a;慢启动/拥塞避免/快重传/快恢…

CentOS 7.2 虚机 ssh 登录报错在重启后无法进入系统

文章目录前言1. 故障描述2. 故障诊断3. 故障原因4. 解决方案总结前言 上周帮用户处理了一个 linux 虚拟机在重启后无法正常进入操作系统的故障&#xff0c;觉得比较有意思&#xff0c;在这里分享给大家。 1. 故障描述 事情的起因是一台系统版本为 CentOS 7.2 的 VMware 虚拟机…

《从使用到源码:OkHttp3责任链模式剖析》

一 从使用开始0.依赖引入implementation ("com.squareup.okhttp3:okhttp:3.14.7")1.创建OkHttpClient实例方式一&#xff1a;直接使用默认配置的Builder//从源码可以看出&#xff0c;当我们直接new创建OkHttpClient实例时&#xff0c;会默认给我们配置好一个Builder …

安装3DS MAX 2026后,无法运行,提示缺少.net core的解决方案

今天安装了3DS MAX 2026&#xff08;俗称3DMAX&#xff09;&#xff0c;安装完毕后死活运行不了。提示如下&#xff1a; 大意是找不到所需的.NET Core 8库文件。后来搜索了下&#xff0c;各种文章说.NET CORE和.NET FRAMEWORK不是一个东西。需要单独下载安装。然后根据提示&…

FastAPI + LangChain 和 Spring AI + LangChain4j

FastAPI+LangChain和Spring AI+LangChain4j这两个技术组合进行详细对比。 核心区别: 特性维度 FastAPI + LangChain (Python栈) Spring AI + LangChain4j (Java栈) 技术栈 Python生态 (FastAPI, LangChain) Java生态 (Spring Boot, Spring AI, LangChain4j) 核心设计哲学 灵活…

Apache 2.0 开源协议详解:自由、责任与商业化的完美平衡-优雅草卓伊凡

Apache 2.0 开源协议详解&#xff1a;自由、责任与商业化的完美平衡-优雅草卓伊凡引言由于我们优雅草要推出收银系统&#xff0c;因此要采用开源代码&#xff0c;卓伊凡目前看好了一个产品是apache 2.0协议&#xff0c;因此我们有必要深刻理解apache 2.0协议避免触犯版权问题。…

自学嵌入式第37天:MQTT协议

一、MQTT&#xff08;消息队列遥测传输协议Message Queuing Telemetry Transport&#xff09;1.MQTT是应用层的协议&#xff0c;是一种基于发布/订阅模式的“轻量级”通讯协议&#xff0c;建构于TCP/IP协议上&#xff0c;可以以极少的代码和有限的带宽为连接远程设备提供实时可…

RabbitMQ--延时队列总结

一、延迟队列概念 延迟队列&#xff08;Delay Queue&#xff09;是一种特殊类型的队列&#xff0c;队列中的元素需要在指定的时间点被取出和处理。简单来说&#xff0c;延时队列就是存放需要在某个特定时间被处理的消息。它的核心特性在于“延迟”——消息在队列中停留一段时间…

Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!

在日常工作中&#xff0c;我们经常需要处理大量的 PDF 文档&#xff0c;无论是提取报告中的关键数据&#xff0c;还是解析合同中的重要条款&#xff0c;手动复制粘贴不仅效率低下&#xff0c;还极易出错。当面对海量的 PDF 文件时&#xff0c;这种传统方式更是让人望而却步。那…