【MySQL】第11節|MySQL 8.0 主從復制原理分析與實戰(一)

一、MySQL主從復制基礎

1. 核心概念
  • 定義

MySQL主從復制是將主庫(Source/Master)的數據變更同步到一個或多個從庫(Replica/Slave)的機制,默認采用異步復制,支持全庫、指定庫或表的同步。

  • 角色
    • 主庫:負責處理寫請求,記錄二進制日志(Binlog)。
    • 從庫:通過讀取主庫Binlog并回放(Relay Log)實現數據同步,支持讀請求分擔。
2. 核心優勢
  1. 高可用性:通過多從庫部署提升容災能力,主庫故障時可手動/自動切換至從庫。
  2. 讀寫分離:從庫承擔讀請求,緩解主庫壓力,提升整體吞吐量。
  3. 異地災備:從庫部署至異地機房,降低地域級故障風險。
3. 復制類型
  • 異步復制:主庫提交事務后立即返回客戶端,無需等待從庫確認,可能存在延遲和數據丟失風險。
  • 半同步復制:主庫等待至少一個從庫確認接收Binlog后再提交事務,提升數據可靠性,但增加響應延遲。
  • 延遲復制:從庫故意落后主庫指定時間,用于數據誤操作恢復(如誤刪表)。

二、異步復制原理與配置

1. 核心流程(基于Binlog位點)
  1. 主庫生成Binlog

主庫執行寫操作時,將變更記錄到Binlog文件(如mysql-bin.000001)。

  1. 從庫拉取Binlog

從庫的I/O線程通過CHANGE MASTER TO指定主庫地址、Binlog文件名(如mysql-bin.000001)和起始位置(Position),請求同步數據。

  1. 主庫推送Binlog

主庫的Dump線程根據從庫請求的位點推送Binlog數據。

  1. 從庫寫入中繼日志(Relay Log)

從庫接收Binlog并寫入本地Relay Log,由SQL線程解析并回放,更新本地數據。

2. 關鍵配置步驟(示例)

主庫配置

# custom.cnf
[mysqld]
server-id=10          # 唯一標識主庫
log-bin=mysql-bin     # 啟用Binlog
binlog-format=ROW     # 推薦使用ROW格式,記錄行級變更

從庫配置

[mysqld]
server-id=11          # 唯一標識從庫
relay-log=relay-bin   # 中繼日志路徑
read-only=ON          # 從庫設置為只讀(避免誤寫)

主從連接配置(從庫執行)

-- MySQL 8.0.23前使用CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST='主庫IP',MASTER_PORT=3306,MASTER_USER='復制用戶',MASTER_PASSWORD='密碼',MASTER_LOG_FILE='mysql-bin.000001',  -- 主庫當前Binlog文件MASTER_LOG_POS=1234;                 -- 主庫當前Binlog位置-- MySQL 8.0.23+使用CHANGE REPLICATION SOURCE TO
CHANGE REPLICATION SOURCE TO SOURCE_HOST='主庫IP',SOURCE_PORT=3306,SOURCE_USER='復制用戶',SOURCE_PASSWORD='密碼',SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=1234;START REPLICA;  -- 啟動從庫復制線程
3. 狀態驗證
-- 主庫查看Binlog狀態
SHOW MASTER STATUS;-- 從庫查看復制狀態(關鍵字段)
SHOW REPLICA STATUS \G
# 重點關注:
# Replica_IO_Running: Yes       -- I/O線程運行正常
# Replica_SQL_Running: Yes      -- SQL線程運行正常
# Seconds_Behind_Master: 0      -- 復制延遲(0表示無延遲)

三、半同步復制:提升數據可靠性

1. 核心原理
  • 主庫在提交事務前,等待至少一個從庫確認已接收并寫入Relay Log。
  • 若從庫超時未響應,主庫退化為異步復制;從庫恢復后自動切回半同步。
2. 關鍵配置

主庫啟用半同步插件

INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
SET GLOBAL rpl_semi_sync_source_enabled=ON;

從庫啟用半同步插件

INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
SET GLOBAL rpl_semi_sync_replica_enabled=ON;

核心參數

  • rpl_semi_sync_source_wait_for_replica_count:主庫等待至少N個從庫確認(默認1)。
  • rpl_semi_sync_source_timeout:等待超時時間(毫秒,默認10000)。

四、基于GTID的復制:自動化位點管理

1. GTID核心優勢
  • 全局唯一事務ID:每個事務在主庫生成唯一GTID(格式:server_uuid:transaction_id),避免Binlog位點手動管理。
  • 自動定位同步起點:從庫通過MASTER_AUTO_POSITION=1自動獲取主庫最新事務,無需指定Binlog文件名和位置。
  • 一致性保障:確保每個事務在主從庫僅執行一次,避免重復或遺漏。
2. 配置要點

主從庫啟用GTID

[mysqld]
gtid_mode=ON               # 啟用GTID模式
enforce_gtid_consistency=ON # 強制GTID一致性(避免非事務語句破壞一致性)

從庫配置(自動定位)

CHANGE REPLICATION SOURCE TO SOURCE_HOST='主庫IP',SOURCE_PORT=3306,SOURCE_USER='復制用戶',SOURCE_PASSWORD='密碼',SOURCE_AUTO_POSITION=1;  # 關鍵:啟用自動位點管理START REPLICA;
3. 主從切換實戰
  1. 模擬主庫宕機:停止主庫服務。
  2. 提升從庫為新主庫
-- 在目標從庫執行(如replica1)
STOP REPLICA;
RESET MASTER;  -- 清除原有復制配置,成為主庫
  1. 其他從庫指向新主庫
CHANGE REPLICATION SOURCE TO SOURCE_HOST='新主庫IP',SOURCE_AUTO_POSITION=1;
START REPLICA;

五、主從復制痛點與解決方案

1. 傳統Binlog位點復制的痛點
  • 手動管理復雜:首次配置或故障恢復時需手動指定Binlog文件名和位置,易出錯。
  • 單點故障風險:主庫宕機后,從庫需人工選擇新主庫并配置位點,耗時且可能丟失數據。
2. GTID的解決方案
  • 自動化位點管理:通過SOURCE_AUTO_POSITION自動同步最新事務,無需人工干預。
  • 快速故障切換:從庫基于GTID集合差集自動追趕數據,減少切換時間。

六、總結:復制模式對比

維度

異步復制(Binlog位點)

半同步復制

GTID復制

數據可靠性

低(可能丟數據)

中(至少1從庫確認)

高(事務唯一且有序)

配置復雜度

高(手動管理位點)

中(需配置插件和參數)

低(自動位點管理)

故障恢復

慢(人工配置位點)

中(需手動切換主庫)

快(自動同步差集事務)

適用場景

非核心業務、低延遲要求

金融類中等可靠性場景

高可用集群、頻繁主從切換場景

建議:生產環境優先使用GTID+半同步復制組合,平衡可靠性與性能;傳統Binlog位點復制僅用于 legacy 系統或簡單測試場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82577.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【RabbitMQ】記錄 InvalidDefinitionException: Java 8 date/time type

目錄 1. 添加必要依賴 2. 配置全局序列化方案&#xff08;推薦&#xff09; 3. 配置RabbitMQ消息轉換器 關鍵點說明 1. 添加必要依賴 首先確保項目中包含JSR-310支持模塊&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…

【機器學習基礎】機器學習入門核心算法:K-近鄰算法(K-Nearest Neighbors, KNN)

機器學習入門核心算法&#xff1a;K-近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09; 一、算法邏輯1.1 基本概念1.2 關鍵要素距離度量K值選擇 二、算法原理與數學推導2.1 分類任務2.2 回歸任務2.3 時間復雜度分析 三、模型評估3.1 評估指標3.2 交叉驗證調參 四、應用…

在h5端實現錄音發送功能(兼容內嵌微信小程序) recorder-core

本文將通過一個實際的 Vue3 組件示例&#xff0c;帶你一步步實現“按住錄音&#xff0c;松開發送&#xff0c;上滑取消”的語音錄制功能。 我們將使用強大且小巧的開源庫 recorder-core&#xff0c;支持 MP3、WAV、AAC 等編碼格式&#xff0c;兼容性較好。 &#x1f527; 項目…

深入掌握Node.js HTTP模塊:從開始到放棄

文章目錄 一、HTTP模塊入門&#xff1a;從零搭建第一個服務器1.1 基礎概念解析1.2 手把手創建服務器 二、核心功能深入解析2.1 處理不同請求類型2.2 實現文件下載功能 三、常見問題解決方案3.1 跨域問題處理3.2 防止服務崩潰3.3 調試技巧 四、安全最佳實踐4.1 請求頭安全設置4.…

SSM整合:Spring+SpringMVC+MyBatis完美融合實戰指南

前言 在Java企業級開發領域&#xff0c;SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架組合一直占據著重要地位。這三個輕量級框架各司其職又相互配合&#xff0c;為開發者提供了高效、靈活的開發體驗。本文將深入探討SSM框架的整合過程&#xff0c;揭示整合背后的原…

[AI]大模型MCP快速入門及智能體執行模式介紹

[AI]大模型MCP快速入門及智能體執行模式介紹 一、MCP入門 介紹 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是一種由Anthropic公司于2024年提出的開放標準協議&#xff0c;旨在為大型語言模型&#xff08;LLM&#xff09;提供統一接口&am…

Mac M1 安裝 ffmpeg

1.前言 官網那貨沒有準備m系列的靜態包&#xff0c;然后我呢&#xff0c;不知道怎么想的就從maven項目中的 javacv-platform&#xff0c;且版本為1.5.11依賴里面將這個靜態包把了出來&#xff0c;親測能用&#xff0c;感覺比那些網上說的用什么wget編譯安裝、brew安裝快多了。…

unity控制相機圍繞物體旋轉移動

記錄一下控制相機圍繞物體旋轉與移動的腳本&#xff0c;相機操作思路分為兩塊&#xff0c;一部分為旋轉&#xff0c;一部分為移動&#xff0c;旋轉是根據當前center中心點的坐標&#xff0c;根據距離設置與默認的旋轉進行位置移動&#xff0c;移動是根據相機的左右和前后進行計…

python打卡day38@浙大疏錦行

知識點回顧&#xff1a; Dataset類的__getitem__和__len__方法&#xff08;本質是python的特殊方法&#xff09;Dataloader類minist手寫數據集的了解 作業&#xff1a;了解下cifar數據集&#xff0c;嘗試獲取其中一張圖片 一、首先加載CIFAR數據集 import torch import torchvi…

用戶配置文件(Profile)

2.4.5 用戶配置文件&#xff08;Profile&#xff09; 用戶配置文件由以下組件構成&#xff1a; 一個運營商安全域&#xff08;MNO-SD&#xff09; 輔助安全域&#xff08;SSD&#xff09;和CASD Applets 應用程序&#xff08;如NFC應用&#xff09; 網絡接入應用&#xff…

如何給自研MCP加上安全驗證

前言 剛過去兩個月,市面的 MCP 服務,如雨后春筍一般不斷涌現出來,包括;百度、高德、網盤、支付寶。這些 MCP 服務,可以讓我們基于 Spring AI 框架構建的 Agent 具備非常豐富的使用功能。同時這也說明,程序員???????,應該具備開發 MCP 服務的能力,Spring AI 讓 J…

Unity網絡開發實踐項目

摘要&#xff1a;該網絡通信系統基于Unity實現&#xff0c;包含以下幾個核心模塊&#xff1a; 協議配置&#xff1a;通過XML定義枚舉&#xff08;如玩家/英雄類型&#xff09;、數據結構&#xff08;如PlayerData&#xff09;及消息協議&#xff08;如PlayerMsg&#xff09;&a…

OpenCV CUDA模塊圖像過濾------創建一個 Sobel 濾波器函數createSobelFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于創建一個 Sobel 濾波器&#xff0c;用于在 GPU 上進行邊緣檢測。它基于圖像的梯度計算&#xff1a; dx 表示對 x 方向求導的階數&…

【JavaSE】枚舉和注解學習筆記

枚舉和注解 -枚舉 規定多選一數據類型的解決方案-枚舉 枚舉對應英文(enumeration,簡寫 enum) 2)枚舉是一組常量的集合。 3)可以這里理解:枚舉屬于一種特殊的類&#xff0c;里面只包含一組有限的特定的對象。 枚舉的兩種實現方式 自定義實現枚舉 使用enum關鍵字實現枚舉 自…

Spark SQL進階:解鎖大數據處理的新姿勢

目錄 一、Spark SQL&#xff0c;為何進階&#xff1f; 二、進階特性深剖析 2.1 窗口函數&#xff1a;數據洞察的新視角 2.2 高級聚合&#xff1a;挖掘數據深度價值 2.3 自定義函數&#xff08;UDF 和 UDTF&#xff09;&#xff1a;拓展功能邊界 三、性能優化實戰 3.1 數…

如何利用 Conda 安裝 Pytorch 教程 ?

如何利用 Conda 安裝 Pytorch 教程 &#xff1f; 總共分為六步走&#xff1a; &#xff08;1&#xff09;第一步&#xff1a;驗證conda 環境是否安裝好&#xff1f; 1) conda -V2) conda --version&#xff08;2&#xff09;第二步&#xff1a;查看現有環境 conda env list…

什么是HTTP

HTTP&#xff08;HyperText Transfer Protocol&#xff09;是萬維網數據通信的基礎協議&#xff0c;作為應用層協議具有以下關鍵特性&#xff1a; 客戶端-服務器模型&#xff1a;基于請求/響應模式 無狀態協議&#xff1a;默認不保留通信狀態 可擴展性&#xff1a;通過首部字…

2025-05-27 學習記錄--Python-模塊

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、模塊 ?? &#xff08;一&#xff09;模塊的導入與使用 &#x1f36d; 模塊的導入&#xff1a;&#x1f41d; 模塊 就好比…

leetcode 131. Palindrome Partitioning

目錄 一、題目描述 二、方法1、回溯法每次暴力判斷回文子串 三、方法2、動態規劃回溯法 一、題目描述 分割回文子串 131. Palindrome Partitioning 二、方法1、回溯法每次暴力判斷回文子串 class Solution {vector<vector<string>> res;vector<string>…

重構開發范式!飛算JavaAI革新Spring Cloud分布式系統開發

分布式系統憑借高可用性、可擴展性等核心優勢&#xff0c;成為大型軟件項目的標配架構。Spring Cloud作為Java生態最主流的分布式開發框架&#xff0c;雖被廣泛應用于微服務架構搭建&#xff0c;但其傳統開發模式卻面臨效率瓶頸——從服務注冊中心配置到網關路由規則編寫&#…