首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主從同步架構完整部署指南:原理、配置與驗證

     編輯:MySQL 資料庫相關知識

前言

MySQL 主從同步是目前企業級應用中最廣泛採用的資料庫架構之一,技術成熟度高、配置相對簡單。特別是針對高併發讀寫場景,透過「主寫從讀」的架構設計,能有效分散資料庫負載、提升系統整體效能與可用性。

核心同步機制解析

MySQL 複制的核心流程包含三個關鍵階段:

  1. 主庫記錄變更:Master 將所有數據變更事件(UPDATE、DELETE、DDL 等)順序寫入二進制日誌
  2. 從庫拉取日誌:Slave 的 I/O 線程連接 Master 的 Binlog Dump 線程,獲取二進制日誌並本地存儲為 Relay Log
  3. 重放執行變更:Slave 的 SQL 線程讀取 Relay Log,在本地重放執行變更事件,實現數據同步

MySQL 主從同步架構圖

主從同步的核心價值

  • 熱備份機制:在從庫執行備份操作,完全不影響主庫業務服務
  • 讀寫分離:主庫處理寫入,從庫分擔讀取請求,大幅提升並發處理能力
  • 故障切換:主庫異常時可快速提升從庫為新主庫,保障業務連續性

完整部署步驟詳解

第一階段:環境準備

  • 確保主從 MySQL 版本一致,建議 5.5 以上版本
  • 主從數據庫初始數據保持一致(可透過 mysqldump 或 xtrabackup 同步)

第二階段:主庫配置

編輯 /etc/my.cnf,關鍵參數配置如下:

[mysqld]
# 啟用二進制日誌
log-bin = mysql-bin
# 主庫唯一標識,集群內不可重複
server-id = 1
# 二進制日誌存放路徑與前綴
log-bin=/home/mysql/logs/binlog/bin-log
# 單個 binlog 文件最大體積
max_binlog_size = 500M
# 事務緩存大小
binlog_cache_size = 128K
# 指定同步的數據庫(多個另起一行)
binlog-do-db = adb
# 排除同步的系統庫
binlog-ignore-db = mysql
# 從庫同步時同步更新自身 binlog
log-slave-updates
# binlog 保留天數
expire_logs_days = 2
# 混合日誌格式,兼容性與效能平衡
binlog_format = "MIXED"

參數深度解析:

  • server-id:集群內每個節點必須唯一,配置文件中僅保留第一個生效
  • binlog-do-db / binlog-ignore-db:精確控制同步範圍,避免系統表同步造成衝突
  • binlog_format=MIXED:結合 Statement 與 Row 模式優點,有效防止主鍵衝突問題

配置完成後重啟 MySQL,並創建專用同步賬號:

-- 創建同步用戶
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '111111';
FLUSH PRIVILEGES;

查看主庫同步狀態(記錄 File 與 Position,後續從庫配置需用到):

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 196      |              |                  |
+------------------+----------+--------------+------------------+
關鍵提醒:執行此命令後切勿再操作主庫,避免位點發生變化導致同步起點不準確。

第三階段:從庫配置

修改 /etc/my.cnf 設置唯一 server-id:

[mysqld]
server-id = 2

配置同步連接參數並啟動:

CHANGE MASTER TO
  MASTER_HOST='192.168.1.2',
  MASTER_USER='slave',
  MASTER_PASSWORD='111111',
  MASTER_LOG_FILE='mysql-bin.000009',
  MASTER_LOG_POS=196;

START SLAVE;

第四階段:驗證同步狀態

SHOW SLAVE STATUS\G;

重點檢查兩個關鍵指標必須均為 Yes:

  • Slave_IO_Running:I/O 線程正常接收主庫日誌
  • Slave_SQL_Running:SQL 線程正常重放執行

若任一為 No 或 Connecting,需根據 Last_IO_Error / Last_SQL_Error 排查具體原因。

進階配置參數參考

主庫端優化參數

# 多庫排除同步
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 僅同步指定庫
binlog-do-db = game
# 日誌保留 10 天
expire_logs_days = 10
# 每 5 次事務刷盤一次,平衡效能與安全
sync_binlog = 5
# 推薦混合模式
binlog_format = mixed

從庫端運維命令

-- 停止同步
STOP SLAVE;
-- 設置重連間隔(秒)
CHANGE MASTER TO MASTER_CONNECT_RETRY=50;
-- 啟動同步
START SLAVE;

同步狀態監控腳本

可部署於從庫,定時檢測同步健康度:

同步監控示意圖

總結

MySQL 主從同步作為經典高可用架構,掌握其原理與配置細節對 DBA 與後端工程師至關重要。生產環境建議結合 MHA、Orchestrator 或 GTID 模式進一步提升故障自動切換能力。文中配置參數針對 5.6+ 版本優化,實際部署請根據業務場景調整。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved