MySQL主從復制實現指南

MySQL主從復制實現指南

一、主從復制原理

主庫 從庫 數據變更操作 寫入二進制日志(binlog) 建立連接請求數據 發送binlog事件 寫入中繼日志(relay log) 重放SQL語句 更新數據 主庫 從庫

主從復制工作流程:

  1. 主庫將數據變更寫入二進制日志
  2. 從庫的IO線程連接主庫請求日志數據
  3. 主庫的Binlog Dump線程發送日志到從庫
  4. 從庫IO線程將日志寫入中繼日志
  5. 從庫SQL線程讀取中繼日志并重放SQL

二、環境準備

服務器配置要求

角色IP地址MySQL版本系統要求
主庫192.168.1.1008.0+4核8G
從庫192.168.1.1018.0+4核8G

網絡要求

  1. 主從服務器網絡互通
  2. 開放3306端口通信
  3. 服務器時間同步(使用NTP)

三、主庫配置步驟

1. 修改MySQL配置文件

# /etc/my.cnf
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
binlog-do-db = mydb  # 需要復制的數據庫
expire_logs_days = 7
max_binlog_size = 100M

2. 重啟MySQL服務

systemctl restart mysqld

3. 創建復制用戶

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;

4. 查看主庫狀態

SHOW MASTER STATUS;

記錄輸出結果:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      785 | mydb         |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

四、從庫配置步驟

1. 修改MySQL配置文件

# /etc/my.cnf
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = ON
replicate-do-db = mydb  # 需要復制的數據庫

2. 重啟MySQL服務

systemctl restart mysqld

3. 配置復制鏈路

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=785;

4. 啟動復制進程

START SLAVE;

5. 檢查復制狀態

SHOW SLAVE STATUS\G

關鍵指標檢查:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

五、主從復制模式對比

復制模式特點適用場景
異步復制主庫提交事務后立即返回,不保證從庫接收對性能要求高的場景
半同步復制主庫提交事務時至少一個從庫確認收到日志數據一致性要求高的場景
全同步復制主庫提交事務時所有從庫確認執行完畢金融級高一致性場景
GTID復制使用全局事務ID,自動定位復制位置,簡化故障轉移高可用集群環境

六、半同步復制配置

1. 主庫安裝插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 1000;  # 1秒超時

2. 從庫安裝插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

3. 重啟從庫IO線程

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

七、常見問題排查

1. 復制中斷處理

-- 查看錯誤原因
SHOW SLAVE STATUS\G-- 跳過單個錯誤
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;-- 重新配置復制
STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO ...; -- 重新配置
START SLAVE;

2. 主從數據一致性校驗

# 使用pt-table-checksum工具
pt-table-checksum \
--host=192.168.1.100 \
--user=root --password=YourPassword \
--databases=mydb \
--replicate=test.checksums

3. 延遲問題優化

  • 檢查網絡延遲:ping 192.168.1.100
  • 增加從庫并行復制線程:
    STOP SLAVE;
    SET GLOBAL slave_parallel_workers = 4;
    START SLAVE;
    
  • 優化慢查詢

八、主從切換步驟

1. 提升從庫為主庫

STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;

2. 原主庫切換為從庫

RESET MASTER;
CHANGE MASTER TO MASTER_HOST='192.168.1.101', ...;
START SLAVE;

九、監控與維護

關鍵監控指標

35% 25% 25% 15% 主從復制監控指標 復制延遲 IO線程狀態 SQL線程狀態 網絡延遲

常用維護命令

-- 主庫操作
SHOW MASTER STATUS;
SHOW BINARY LOGS;
PURGE BINARY LOGS BEFORE '2023-06-01 00:00:00';-- 從庫操作
SHOW SLAVE STATUS;
STOP SLAVE;
START SLAVE;
SHOW RELAYLOG EVENTS;

十、最佳實踐建議

  1. 一致性要求高的場景:使用半同步復制+GTID
  2. 讀寫分離架構:應用層區分讀寫操作
  3. 定期校驗:每周進行主從數據一致性檢查
  4. 監控告警:設置復制延遲和狀態告警
  5. 備份策略:主庫物理備份,從庫邏輯備份
  6. 版本管理:保持主從MySQL版本一致
  7. 故障演練:每季度進行主從切換演練

注意:生產環境建議至少配置兩個從庫,避免單點故障

通過以上配置和管理,我們可以構建穩定可靠的MySQL主從復制架構,實現數據的實時同步和高可用性。

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

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

相關文章

spring jms使用

文章目錄 一、背景介紹二、注意點說明三、代碼pom.xmlmq.propertiesActiveMqConfigJmsSenderActiveMqInfoActivemqProtocolEnum生產者消費者 一、背景介紹 <dependency> 標簽中列出的 spring-jms 是 Spring Framework 提供的一個模塊&#xff0c;用于簡化 Java Message …

筆記——學習HTTP協議

HTTP協議 文章目錄 HTTP協議一、統一資源定位符&#xff08;url&#xff09;&#xff1a;URL編碼格式&#xff1a; 二、HTTP報文結構&#xff1a;三、HTTP請求方法&#xff1a;四、HTTP常見請求頭&#xff1a;五、HTTP狀態碼&#xff1a;六、HTTP常見響應頭&#xff1a;七、HTT…

Unity中的Mathf.Clamp01

2025年6月8日&#xff0c;周日晚上 Mathf.Clamp01 是 Unity 中的一個數學函數&#xff0c;它的作用是將一個浮點數&#xff08;float&#xff09;限制在0 到 1的范圍內。具體來說&#xff1a; 如果輸入值 小于 0&#xff0c;則返回 0。 如果輸入值 大于 1&#xff0c;則返回 1…

1 Studying《Linux Media Documentation》

目錄 1 MEDIA SUBSYSTEM ADMIN AND USER GUIDE 1.1.2 Building support for a media device 1.1.3 Infrared remote control support in video4linux drivers 1.1.4 Digital TV 1.1.5 Cards List 1.1.5.2 PCI drivers 1.1.6 Video4Linux (V4L) driver-specifific docume…

編譯原理 學習 2025年6月10日11:17:54

編譯原理 將高級編程語言編寫的源代碼轉換成機器可執行的代碼(二進制或匯編代碼) 核心任務: 詞法分析(正則表達式和有限自動機): 示例Token分類&#xff1a;關鍵字&#xff1a;if, while 運算符&#xff1a;, 標識符&#xff1a;變量名 分解源代碼為單詞 識別 其中關鍵字 …

風中低語:Linux 信號處理的藝術與實踐

文章目錄 &#x1f307;前言&#x1f3d9;?正文1、信號的處理時機1.1、處理情況1.2、“合適” 的時機 2、用戶態與內核態2.1、概念2.2、重談進程地址空間2.3、信號的處理過程 3、信號的捕捉3.1、內核如何實現信號的捕捉&#xff1f;3.2、sigaction 4、信號部分小結 補充 5、可…

ASP.NET Core SignalR - 部分客戶端消息發送

文章目錄 前言一、消息發送的核心概念1.客戶端標識2.消息接收范圍 二、向特定用戶發送消息管理員向指定用戶發送私信&#xff0c;或用戶之間一對一聊天。 三、向組發送消息聊天室、工作群組、通知訂閱等。 四、廣播消息系統公告、實時統計數據更新等。 五、向角色發送消息向管理…

前后端交互過程中—各類文件/圖片的上傳、下載、顯示轉換

前后端交互過程中—各類文件/圖片的上傳、下載、顯示轉換 圖片上傳下載常用函數&#xff1a;new Blob()**blobParts&#xff1a;&#xff08;必傳&#xff09;****options&#xff1a;&#xff08;可選&#xff09;**blob的常見的MIME類型&#xff1a; URL.createObjectURL()替…

校園二手交易平臺(微信小程序版)

文章目錄 1. 項目概述2. 項目功能思維導圖3. 技術架構1. 前端技術棧2. 后端技術棧 4. 核心模塊實現5. 總結6. 項目實現效果截圖7. 關于作者其它項目視頻教程介紹 1. 項目概述 校園二手交易平臺微信小程序旨在為在校學生提供一個便捷的二手物品交易渠道&#xff0c;包含用戶模塊…

Linux簡單的操作

ls ls 查看當前目錄 ll 查看詳細內容 ls -a 查看所有的內容 ls --help 查看方法文檔 pwd pwd 查看當前路徑 cd cd 轉路徑 cd .. 轉上一級路徑 cd 名 轉換路徑 …

【芯片設計- RTL 數字邏輯設計入門 4.2 -- 組合邏輯賦值 + 時序邏輯狀態保持】

文章目錄 Overview原語句分析變量含義假設(根據命名推測)狀態更新邏輯詳解狀態轉移邏輯舉個實際例子小結Overview 本文將詳細介紹 verilog rtl 中 assign reg_halt_mode_nx = halt_taken | (reg_halt_mode & ~halt_return);的作用,以及這里為何要使用 reg_halt_mode,…

【單片機期末】匯編試卷

一、選擇題 DPTR是16位的&#xff0c;所以尋址范圍是64KB R1是8位的&#xff0c;只能尋址256 訪問內部ROM只能用MOVC指令 一個指令周期是時鐘周期的1/12 12個時鐘周期是一個機器周期 單指令周期是指一個機器周期 T 1 / f 12MHz ~ 1us 13位計數16位計數8位自動重裝載雙8位計數器…

校驗枚舉類類型的入參合法性的統一方案

文章目錄 背景解決實踐定義枚舉類 InEnum注解定義驗證邏輯 InEnumValidator 實際使用 背景 業務要做電商平臺做入參, 在電商平臺被抽離成枚舉類的情況下 &#xff0c;要怎么驗證輸入的參數是正確的呢? 解決 Constraint 實現自定義驗證邏輯 Constraint 注解用于標注其他注解&am…

Unity-NavMesh詳解-其一

今天我們來詳細地探究一下Unity的NavMesh這一性能強大的組件&#xff1a; NavMesh基本使用 NavMesh簡單地說本質上是一個自動尋路的AI組件&#xff0c;我們首先來學習基本的使用。 畫面中我已經添加好了地面&#xff0c;目標&#xff0c;障礙物以及玩家四個要素。 注意我們要…

vue的created和mounted區別

在Vue.js中&#xff0c;created和mounted的核心區別在于調用時機和DOM可訪問性?&#xff1a;created鉤子在組件實例創建后、DOM掛載前調用&#xff0c;適用于數據初始化&#xff1b;mounted鉤子在DOM掛載后調用&#xff0c;支持DOM操作。?? ?調用時機與核心能力對比? ?…

MySQL 8.0 OCP 英文題庫解析(十四)

Oracle 為慶祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免費考取原價245美元的MySQL OCP 認證。 從今天開始&#xff0c;將英文題庫免費公布出來&#xff0c;并進行解析&#xff0c;幫助大家在一個月之內輕松通過OCP認證。 本期公布試題121~130 試題1…

【HarmonyOS 5】拍攝美化開發實踐介紹以及詳細案例

以下是 HarmonyOS 5 拍攝美化功能的簡潔介紹&#xff0c;整合核心能力與技術亮點&#xff1a; 一、AI 影像創新 ?AI 魔法移圖? 系統級圖像分層技術實現人物/物體自由拖拽、縮放與復制&#xff0c;突破傳統構圖限制。自動分離主體與背景&#xff0c;一鍵生成錯位創意照&…

【Java多線程從青銅到王者】懶漢模式的優化(九)

懶漢模式的問題 我們看上述的代碼&#xff0c;當第一次調用getIntance的時候&#xff0c;intance為null&#xff0c;就會進入if里面&#xff0c;創建出實例&#xff0c;當不是第一次調用的時候&#xff0c;此時的intandce不是null&#xff0c;不進入循環&#xff0c;直接return…

SCI期刊查重參考文獻會被查重嗎?

查重的時候&#xff0c;參考文獻不會被查重。 不管中文還是英文查重系統里一般都有排除參考文獻的設置。 比如英文查重系統iThenticate 的排除文獻的設置如下&#xff1a; 在iThenticate在線報告界面的右下角點擊“漏斗”圖標&#xff08;Filter&#xff09;&#xff0c; ?…

OpenLayers 獲取地圖狀態

注&#xff1a;當前使用的是 ol 5.3.0 版本&#xff0c;天地圖使用的key請到天地圖官網申請&#xff0c;并替換為自己的key 地圖狀態信息包括中心點、當前縮放級別、比例尺以及當前鼠標移動位置信息等&#xff0c;在WebGIS開發中&#xff0c;地圖狀態可以方便快捷的向用戶展示基…