MySQL復制技術的發展歷程

在互聯網應用不斷發展的二十多年里,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;這種傳統方式更是讓人望而卻步。那…