【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/diannao/84726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84726.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84726.shtml

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

相關文章

怎么判斷一個Android APP使用了Cocos 這個跨端框架

要判斷一個 Android 應用是否使用了 Cocos 跨端框架,可以通過以下步驟進行驗證: 一、安裝包結構分析 1. 解壓 APK 將 .apk 文件重命名為 .zip 并解壓,檢查以下特征文件: ? lib/ 目錄: Cocos 引擎的核心原生庫文件通常…

刪除word中由奇偶頁和頁碼1設置多出來的空白頁

問題: 在調整畢設論文格式時,要求奇偶頁眉設置不同,且摘要頁的頁碼是1(I)。如果摘要頁在整個文檔的第偶數頁,將其頁碼設置為1后會變為奇數頁,word為了湊齊奇偶頁,會在摘要前增加一個…

# 探索自然語言處理的奧秘:基于 Qwen 模型的文本分類與對話系統實現

探索自然語言處理的奧秘:基于 Qwen 模型的文本分類與對話系統實現 在當今數字化時代,自然語言處理(NLP)技術正以前所未有的速度改變著我們的生活和工作方式。從智能語音助手到自動文本生成,從情感分析到機器翻譯&…

Linux Shell 切換

在 Linux 系統中,切換至 Bash Shell 在 Linux 系統中,切換至 Bash Shell 的方法如下: 臨時切換到 Bash 直接在終端輸入以下命令,啟動一個新的 Bash 會話: bash 退出時輸入 exit 或按 CtrlD 返回原 Shell。 永久切換…

在Windows上,將 Ubuntu WSL 安裝并遷移到 D 盤完整教程(含 Appx 安裝與遷移導入)

💻 將 Ubuntu WSL 安裝并遷移到 D 盤完整教程(含 Appx 安裝與遷移導入) 本文記錄如何在 Windows 系統中手動啟用 WSL、下載 Ubuntu 安裝包、安裝并遷移 Ubuntu 到 D 盤,避免默認寫入 C 盤,提高系統性能與可維護性。 ?…

doucker 掛載卷

在 Docker 中,掛載卷(Volumes)是一種非常重要的功能,它允許你將宿主機的文件系統與容器的文件系統進行共享。掛載卷不僅可以用于持久化數據,還可以用于在宿主機和容器之間傳遞文件。 掛載卷的類型 Docker 支持多種類型…

BLIP3-o:一系列完全開源的統一多模態模型——架構、訓練與數據集

摘要 在近期關于多模態模型的研究中,將圖像理解與生成統一起來受到了越來越多的關注。盡管圖像理解的設計選擇已經得到了廣泛研究,但對于具有圖像生成功能的統一框架而言,其最優模型架構和訓練方案仍有待進一步探索。鑒于自回歸和擴散模型在…

數據分析案例-基于紅米和華為手機的用戶評論分析

🤵?♂? 個人主頁:艾派森的個人主頁 ?🏻作者簡介:Python學習者 🐋 希望大家多多支持,我們一起進步!😄 如果文章對你有幫助的話, 歡迎評論 💬點贊&#x1f4…

基礎框架 兼容視頻格式

基礎框架 兼容視頻格式 修改 \src\components\Upload\src\BasicUpload.vue 數據庫新增 vue <template><div class"w-full"><div class"upload"><div class"upload-card"><!--圖片列表--><divclass"uploa…

qiankun 子應用怎樣通過 props拿到子應用【注冊之后掛載之前】主應用中發生變更的數據

場景描述&#xff1a;子應用需要在接口調用和頁面渲染時&#xff0c;需要用到主應用登錄之后拿到的用戶數據 邏輯前提&#xff1a; 1、主應用在 main.js中通過 registerMicroApps注冊了子應用 2、主應用登錄之后將用戶數據傳遞給子應用 >> 原先的做法&#xff08;有問題&…

Hooks 進階:自定義 Hook 的設計與實踐

引言 React Hooks 已成為現代 React 開發的核心范式&#xff0c;而自定義 Hook 則為我們提供了強大的代碼復用機制。 自定義 Hook 的基礎原理 自定義 Hook 本質上是一種函數復用機制&#xff0c;它允許我們將組件邏輯提取到可重用的函數中。與傳統的高階組件(HOC)和 render …

鋰電電動扭剪扳手市場報告:現狀、趨勢與競爭格局深度解析

一、鋰電電動扭剪扳手市場概述 鋰電電動扭剪扳手作為建筑施工、鋼結構安裝等領域的關鍵工具&#xff0c;憑借其便攜性、高效性及環保特性&#xff0c;正逐步替代傳統手動及氣動工具。該設備通過鋰電池供電&#xff0c;結合智能扭矩控制技術&#xff0c;可精準完成高強度螺栓的…

[面試精選] 0076. 最小覆蓋子串

文章目錄 1. 題目鏈接2. 題目描述3. 題目示例4. 解題思路5. 題解代碼6. 復雜度分析 1. 題目鏈接 76. 最小覆蓋子串 - 力扣&#xff08;LeetCode&#xff09; 2. 題目描述 給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字…

rabbitmq的高級特性

一.發送者的可靠性 1.生產者重試機制 修改publisher模塊的application.yaml文件 spring:rabbitmq:connection-timeout: 1s # 設置MQ的連接超時時間template:retry:enabled: true # 開啟超時重試機制initial-interval: 1000ms # 失敗后的初始等待時間multiplier: 1 # 失敗后下…

北京大學肖臻老師《區塊鏈技術與應用》公開課:02-BTC-密碼學原理

文章目錄 1.比特幣中用到的密碼學的功能2. hash3. 簽名 1.比特幣中用到的密碼學的功能 比特幣中用到密碼學中兩個功能&#xff1a; hash、 簽名。 2. hash hash函數的三個特性&#xff1a;抗碰撞性&#xff08;Collision Resistance&#xff09;、隱蔽性&#xff08;Hiding&…

Spring Cloud Gateway高并發限流——基于Redis實現方案解析

本文是一個基于 Spring Cloud Gateway 的分布式限流方案&#xff0c;使用Redis Lua實現高并發場景下的精準流量控制。該方案支持動態配置、多維度限流&#xff08;API路徑/IP/用戶&#xff09;&#xff0c;并包含完整的代碼實現和性能優化建議。 一、架構設計 #mermaid-svg-vg…

SpringAI--RAG知識庫

SpringAI–RAG知識庫 RAG概念 什么是RAG&#xff1f; RAG(Retrieval-Augmented Genreation&#xff0c;檢索增強生成)是一種結合信息檢索技術和AI內容生成的混合架構&#xff0c;可以解決大模型的知識時效性限制和幻覺問題。 RAG在大語言模型生成回答之前&#xff0c;會先從…

【PhysUnits】14 二進制數的標準化表示(standardization.rs)

一、源碼 這段代碼主要用于處理二進制數的標準化表示。它定義了兩個特質(trait) IfB0 和 IfB1&#xff0c;以及它們的實現&#xff0c;用于處理二進制數的前導零及前導一的簡化。 use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 處理 B0<H> 類型…

將 ubutun 的網絡模式 從NAT 改到 橋接模式后,無法上網,linux 沒有IP地址 的解決方案

首先要將 ubutun 的網絡模式設置為橋接模式 這里再從 NAT 模式改動成 橋接模式的時候&#xff0c;還出現了一個問題。改成橋接模式后&#xff0c;linux沒有ip地址了。原因是 不知道什么時候 將 虛擬網絡編輯器 中的值改動了 要選擇這個 自動 選項

多模態大語言模型arxiv論文略讀(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ?? 論文標題&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…