首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 內建複製功能配置實戰:主從架構搭建全流程

     編輯:MySQL 綜合教學

前言

MySQL 複製是高可用、讀寫分離、災備的基石。本文基於 MySQL 3.23.25 版本(現代版本原理相同),詳細記錄雙節點主從搭建、帳號建立、二進制日誌啟用、快照初始化、狀態切換等核心步驟。

環境規劃

角色IP說明
Master (A)192.168.0.1寫入主庫,開啟 binlog
Slave (B)192.168.0.2只讀從庫,拉取 binlog 重放

建議: 主從版本保持一致,優先使用最新 GA 版本。

一、主庫配置

1. 建立複製專用帳號

從庫需以此帳號連線主庫讀取 binlog:

GRANT FILE ON *.* TO 'replicate'@'192.168.0.2' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

僅授予 FILE 權限,遵循最小權限原則。

2. 啟用二進制日誌

編輯 my.cnf [mysqld] 區段新增:

log-bin

重啟後主庫將在資料目錄生成 hostname-bin.000001 等 binlog 文件。

3. 獲取一致性快照並重啟

  1. 關閉主庫服務:mysqladmin shutdown
  2. 將整個資料目錄(含 ibdata*、.frm、.MYD、.MYI 等)完整複製/打包。
  3. 重新啟動主庫:mysqld_safe &

此快照將作為從庫初始資料基準。

二、從庫初始化

  1. 將主庫快照解壓至從庫資料目錄(datadir)。
  2. 編輯從庫 my.cnf,設定 server-id=2(主庫為 1),並可選啟用 log-bin 以利鏈式複製。
  3. 啟動從庫服務。

三、建立主從連結

在從庫執行:

CHANGE MASTER TO
  MASTER_HOST='192.168.0.1',
  MASTER_USER='replicate',
  MASTER_PASSWORD='password',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='hostname-bin.000001',  -- 主庫當前 binlog 文件
  MASTER_LOG_POS=4;                       -- 起始位置(通常為 4)

隨後啟動複製線程:

START SLAVE;

四、驗證與監控

SHOW SLAVE STATUS\G

關鍵指標:

  • Slave_IO_Running: Yes — I/O 線程正常連線主庫
  • Slave_SQL_Running: Yes — SQL 線程正常重放
  • Seconds_Behind_Master: 0 — 無延遲

五、角色切換(主從切換/故障轉移)

  1. 停止主庫寫入:FLUSH TABLES WITH READ LOCK;
  2. 確認從庫追平:SHOW SLAVE STATUS 顯示 Seconds_Behind_Master=0。
  3. 從庫提升為主:STOP SLAVE; RESET MASTER;(清空自身 binlog),修改 server-id、應用寫入權限。
  4. 原主庫降為從:重新配置 CHANGE MASTER TO ... 指向新主庫,START SLAVE;。
  5. 解鎖原主庫:UNLOCK TABLES;

生產環境建議使用 MHA、Orchestrator、GTID 自動化故障轉移。

六、常見坑點提醒

  • server-id 必須全域唯一,否則複製報錯。
  • 主庫 binlog_format 建議 ROW 或 MIXED,減少不一致風險。
  • 防火牆需放行 3306,且主庫 bind-address 不可為 127.0.0.1。
  • 大事務、長 SQL 會導致複製延遲,需拆分或優化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved