MySQL 主從復制與一主多從架構實戰詳解

文章目錄

一、MySQL 主從復制的本質原理

? 數據同步流程:

主從復制三大線程:

二、主從復制的三種模式

三、一主多從架構設計與應用

? ? 應用場景:

? 優勢:

四、單機模擬主從復制(實戰配置)

? ? 環境準備:

示例配置片段(my.cnf):

?設置主從關系:

五、主主復制(雙主復制)配置

? 原理:

?關鍵注意事項:

示例配置(主 A):

? ?使用場景:

六、項目中常見主從實踐方案

七、故障應對與運維建議

結語?


主從原理 + 多種復制場景 + 實戰配置,一次講清!


一、MySQL 主從復制的本質原理

MySQL 主從復制是通過 二進制日志(binlog)+ 中繼日志(relay log) 機制實現的。

? 數據同步流程:

1. 主庫開啟 binlog,記錄所有寫操作
2. 從庫的 I/O 線程向主庫請求 binlog
3. 主庫的 dump 線程將 binlog 發送給從庫
4. 從庫的 I/O 線程寫入 relay log
5. 從庫的 SQL 線程讀取 relay log 并執行

主從復制三大線程:

名稱角色功能
Dump 線程主庫向從庫推送 binlog 內容
I/O 線程從庫拉取 binlog 并寫入中繼日志
SQL 線程從庫讀取中繼日志并執行 SQL

二、主從復制的三種模式

模式特點延遲一致性
異步復制(默認)主庫執行完即返回可能丟數據
半同步復制至少一個從庫確認才返回提高可靠性
GTID復制(基于事務ID)支持 failover 自動切換更強一致性更好容災支持

三、一主多從架構設計與應用

一主多從是 MySQL 構建讀寫分離的常見架構:

           +-----------+|           ||  Master   ||           |+-----------+/    |    \/     |     \+--------+ +--------+ +--------+| Slave1 | | Slave2 | | Slave3 |+--------+ +--------+ +--------+

? ? 應用場景:

  • 主庫處理寫操作(INSERT/UPDATE/DELETE)

  • 從庫處理讀請求(SELECT)

  • 配合中間件(如 MyCAT、ShardingSphere、ProxySQL)實現自動讀寫分離

? 優勢:

  • 提升系統并發能力(讀寫分離)

  • 降低主庫壓力

  • 增加容災能力,主掛后可快速切換為從


四、單機模擬主從復制(實戰配置)

? ? 環境準備:

  • 同一臺主機運行多個 MySQL 實例(如 3306、3307)

  • 修改配置文件以區分實例

示例配置片段(my.cnf):

[mysqld]
server-id=1              # 主從必須唯一
log-bin=mysql-bin        # 主庫需開啟binlog
port=3306[mysqld2]
server-id=2
relay-log=mysql-relay
port=3307

?設置主從關系:

-- 從庫配置
CHANGE MASTER TOMASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl_pass',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=  154;START SLAVE;
SHOW SLAVE STATUS\G;

五、主主復制(雙主復制)配置

? 原理:

兩臺 MySQL 互為主從,都開啟 binlog 與 relay log。

        +-----------+         +-----------+|  Master A | <-----> |  Master B |+-----------+         +-----------+

?關鍵注意事項:

  • 兩邊寫入不能寫相同主鍵或數據 → 否則數據沖突

  • 通常搭配 auto_increment_offsetauto_increment_increment 避免主鍵沖突

示例配置(主 A):

server-id=1
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2

主 B:

server-id=2
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2

? ?使用場景:

  • 多活讀寫(慎用,建議僅讀活)

  • 高可用自動切換(結合 MHA、Orchestrator 使用)


六、項目中常見主從實踐方案

項目場景推薦方案說明
中小型系統一主兩從讀寫分離 + 冗余
高并發大讀量一主多從(>3)配合 ProxySQL 或 LVS 負載
容災架構主主復制 + keepalived主庫故障時自動切換
單機模擬開發3306 + 3307 模擬主從便于學習測試復制流程

七、故障應對與運維建議

  • 定期監控 Slave_IO_Running/Slave_SQL_Running

  • 配置 slave_skip_errors 時慎重使用

  • 使用 pt-table-checksum 保證主從一致

  • 設置從庫只讀:read_only=ON


結語?

MySQL 的主從復制為分布式架構提供了堅實的基礎。不論是一主多從、主主復制,還是讀寫分離,在不同規模和業務需求下都能靈活組合構建高可用、高性能的數據庫架構。


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

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

相關文章

分布式光纖測溫及紅外測溫系統的區別?

在現代工業監控系統中&#xff0c;溫度監測是保障設備安全運行的關鍵環節。分布式光纖測溫&#xff08;DTS&#xff09;和紅外測溫&#xff08;IR&#xff09;是兩種常見的溫度監測技術。 本文將介紹這兩種技術的原理、優勢以及應用場景的區別。 光纖測溫技術的原理是利用光纖…

sql優化:使用 exists 優化 in () 或 = ()

1、使用 exists 優化 in () 優化前&#xff1a; select id, order_no, apply_time, apply_dept, apply_operator, purpose, stage, remark from BranchWarehouseApplyMaster where stage 0 and warehouse_id 1 and apply_dept in ( select emp_DeptID from Employee where …

HTTP 響應狀態碼

HTTP 響應狀態碼&#xff08;Response Status Codes&#xff09; HTTP 響應狀態碼用于表示服務器對客戶端請求的處理結果&#xff0c;由3位數字 組成&#xff0c;分為5類&#xff1a; 狀態碼 類別 常見狀態碼 說明 1xx 信息響應 100&#xff08;Continue&#xff09; …

如何通過插件系統打造個性化效率工作流

在現代工作流中&#xff0c;快速調用工具與自動化操作已成為提升生產力的核心環節。一款真正出色的效率工具&#xff0c;不僅要在響應速度和跨平臺兼容性上表現出色&#xff0c;更需要具備高度的可擴展性&#xff0c;以滿足多樣化的使用場景。 它不僅輕量高效&#xff0c;還支…

Spring上下文模塊設計

經過此前我們設計的如&#xff1a;IoC、Web、數據訪問、AOP等模塊的設計&#xff0c;我們從設計上已經搭建好了Spring的基礎骨架了&#xff0c;但聰明的碼友會思考想到&#xff1a;作為一個基礎框架而言&#xff0c;目前應該是已經夠用了的&#xff0c;但是上進的碼友怎么會就此…

keil5怎么關閉工程

在project里面有一個close project&#xff0c;點擊后就關掉了&#xff0c;之前還按照其他軟件的操作習慣&#xff0c;右鍵工程選項&#xff0c;但是始終沒有發現關閉選項。

騰訊云:6月30日起,自動禁用,及時排查

大家好&#xff0c;我是小悟。 騰訊云發布公告&#xff0c;宣布從2025年6月30日開始&#xff0c;對長期未使用的AccessKey&#xff08;API訪問密鑰&#xff09;進行自動禁用。 簡單來說&#xff0c;如果你的密鑰在90天內沒動靜&#xff0c;系統就會把它關掉&#xff0c;不管是…

【C++】多重繼承與虛繼承

多重繼承與虛繼承 1.單繼承和多重繼承的區別2.語法規則示例代碼&#xff1a;多重繼承子類指定父類的構造示例代碼&#xff1a;多重繼承子類隱藏父類的同名方法 3.虛繼承解決多重繼承遇到的bug示例代碼&#xff1a;環狀繼承引發的問題 3.1 虛基類&#xff1a;3.2 語法規則&#…

GCC編譯/連接/優化等選項

1. GCC編譯/連接/優化等選項 1. GCC編譯/連接/優化等選項 1.1. 簡介1.2. 常用選項 1.2.1. -c -E -S -o1.2.2. -L<path> -l<library>1.2.3. -D<macro>1.2.4. -I<path> 1.3. 代碼生成和優化 1.3.1. -std<standard>1.3.2. -shared1.3.3. -fPIC1.3.…

FFmpeg 壓縮視頻文件

文章目錄 FFmpeg 壓縮視頻文件基本壓縮命令&#xff08;保持 MP4 格式&#xff09;轉換為其他格式示例&#xff1a;關鍵參數說明&#xff1a;額外優化選項&#xff1a; 在FFmpeg中使用多線程加速1. 幀級多線程 (frame-level multithreading)2. 切片級多線程 (slice-level multi…

Ubuntu 系統通過防火墻管控 Docker 容器

Ubuntu 系統通過防火墻管控 Docker 容器指南 一、基礎防火墻配置 # 啟用防火墻 sudo ufw enable# 允許 SSH 連接&#xff08;防止配置過程中斷聯&#xff09; sudo ufw allow 22/tcp二、Docker 配置調整 # 編輯 Docker 配置文件 sudo vim /etc/docker/daemon.json配置文件內…

虛擬機新增硬盤,與數據掛載

我有個虛擬機&#xff0c;當時選擇了獨立文件&#xff0c;現在遇到個問題&#xff0c;硬盤不夠了&#xff0c;索性加了一個新硬盤&#xff0c;現在想把數據庫的數據映射到這個新的硬盤處理。 羅列硬盤 lsblk我得是sdb是新硬盤 2. 分區 sudo fdisk /dev/sdb交互操作&#xff…

go語言學習 第10章:面向對象編程

第10章&#xff1a;面向對象編程 面向對象編程&#xff08;OOP&#xff09;是一種編程范式&#xff0c;它使用“對象”來表示數據和方法&#xff0c;并通過類來定義對象的結構和行為。Go語言雖然不是傳統的面向對象語言&#xff0c;但它通過結構體&#xff08;struct&#xff…

android計算器代碼

本次作業要求實現一個計算器應用的基礎框架。以下是布局文件的核心代碼&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"andr…

Go 語言接口詳解

Go 語言接口詳解 核心概念 接口定義 在 Go 語言中&#xff0c;接口是一種抽象類型&#xff0c;它定義了一組方法的集合&#xff1a; // 定義接口 type Shape interface {Area() float64Perimeter() float64 } 接口實現 Go 接口的實現是隱式的&#xff1a; // 矩形結構體…

我們來學mysql -- 8.4版本記錄慢查詢

記錄慢查詢 開啟慢查詢的配置查看慢查詢狀態動態開啟慢查詢日志永久開啟配置log_throttle_queries_not_using_indexes 記錄慢查詢對性能的影響實際案例說明第一條記錄第二條記錄第三條記錄第四條記錄 開啟慢查詢的配置 查看慢查詢狀態 - 執行 show variables like slow_quer…

2025 年中國大學生程序設計競賽全國邀請賽(鄭州)暨第七屆CCPC河南省大學生程序設計競賽(補題)

文章目錄 前言F、幻形之路G、直徑與最大獨立集H&#xff0c;樹論函數M&#xff0c; 川陀航空學院總結 前言 本次比賽&#xff0c;只能說太多沒接觸的知識了&#xff0c;還有太容易被題面嚇住。 F、幻形之路 題目鏈接&#xff1a;幻形之路 解題思路&#xff1a; 對于這一題只…

如何使用k8s安裝redis呢

在Kubernetes (k8s) 上安裝Redis 在Kubernetes上安裝Redis有幾種方法&#xff0c;下面我將介紹兩種常見的方式&#xff1a;使用StatefulSet直接部署和使用Helm chart部署。 一、安裝redis 1.1 拉去ARM鏡像&#xff08;7.4.2&#xff09; docker pull registry.cn-hangzhou.ali…

SpringBoot的5種日志輸出規范策略

在企業級應用開發中&#xff0c;合理規范的日志記錄是系統穩定運行、問題排查和性能優化的關鍵保障。 SpringBoot作為流行的Java開發框架&#xff0c;提供了強大而靈活的日志支持&#xff0c;但如何建立統一、高效的日志輸出規范卻是許多團隊面臨的挑戰。 本文將介紹SpringBo…

Python Cookbook-7.11 在 PostgreSQL 中儲存 BLOB

任務 需要將 BLOB 存入一個 PostgreSQL 數據庫。 解決方案 PostgreSQL7.2 以及更新的版本支持大對象,而psycopg 模塊提供了二進制轉義函數: import psycopg,cPickle #連接到數據庫,用你的本機來測試數據庫,并獲得游標 connection = psycopg.connect("dbname = test…