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

MySQL 內建複寫功能測試實戰(一):單向主從配置全流程、快照建立、Binlog 啟用與驗證

     編輯:MySQL 資料庫相關知識

MySQL 3.23.23+ 引入內建複寫(Replication),單向主從是高可用、讀寫分離、備份卸載的基石。本系列三篇將從零演示:單向主從 → 雙主互備 → 容錯連線與生產建議。本篇聚焦**單向主從 (A→B) 完整配置流程**。

架構定義

  • Master A (10.1.1.1):寫入節點,產生 Binlog。
  • Slave B (10.1.1.2):讀取/備份節點,從 A 拉取 Binlog 重放。
  • 版本建議:主從**同版本**,官方建議最新穩定版(文中為 3.23.23 beta,現代請用 8.0/5.7 LTS)。

第一步:配置 Master A

  1. 建立複寫專用帳號(最小權限 FILE):
    GRANT FILE ON *.* TO 'replicate'@'10.1.1.2' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
  2. 啟用二進制日誌:
    編輯 my.cnf [mysqld] 區段加入 log-bin。
    重啟 MySQL 後,資料目錄產生 hostname-bin.000001 等 Binlog 檔。
  3. 建立一致性快照(關鍵):
    順序嚴格:
    1) 關閉 MySQL (mysqladmin shutdown)。
    2) **複製整個資料目錄** (/var/lib/mysql/ 或自定 datadir) 到備份位置。
    3) **重新啟動 MySQL**(此時 Binlog 已啟用,開始記錄快照後的所有變更)。
    ⚠️ 若先啟用 Binlog 再關機複製,快照中會混入啟用過程的臨時事件,導致備庫重放報錯。
  4. 傳輸快照到 Slave B:
    同架構可直接複製檔案;異構 (Linux→Solaris) 必須用 mysqldump 邏輯導出導入。

第二步:配置 Slave B

  1. 停止 B 的 MySQL,將快照資料目錄覆蓋至 B 的 datadir。
  2. 修正檔案擁有者/權限:
    chown -R mysql:mysql /datadir
    chmod 660 /datadir/*.MYD /datadir/*.MYI
    chmod 770 /datadir/*/
  3. 啟動 B 驗證快照完整性:
    執行幾條 SELECT 確認資料正確,**嚴禁執行寫入**。
  4. 配置指向 Master A:
    編輯 B 的 my.cnf [mysqld]:
    master-host=10.1.1.1
    master-user=replicate
    master-password=password
  5. 重啟 B 啟動複寫執行緒:
    Slave IO Thread 連線 Master → 拉取 Binlog → 寫入本地 Relay Log → Slave SQL Thread 重放。
    狀態查看:SHOW SLAVE STATUS\G。

驗證複寫生效

  1. 在 Master A 執行:INSERT INTO test.tbl VALUES (1, 'repl_test');
  2. 在 Slave B 執行:SELECT * FROM test.tbl WHERE col2='repl_test';
  3. 若見到剛插入的行,**複寫生效**。

關鍵風險與應對

風險後果應對
快照不完整(漏表/漏庫)備庫重放 Binlog 時找不到表 → SQL Thread 停止快照前 SHOW DATABASES、SHOW TABLES 核對,或用 mysqldump --all-databases
異構平台直接複製檔案資料檔格式不相容 → 啟動失敗/資料損壞跨平台必用 mysqldump 邏輯備份
Binlog 啟用順序錯誤快照包含啟用前事件 → 備庫重放主鍵衝突**關機 → 複製 → 啟動** 嚴格順序
複寫報錯導致 SQL Thread 停止資料漂移、延遲無限增大錯誤日誌分析 → 修正 → SLAVE START 重啟執行緒

現代化配置對照 (MySQL 5.6+/8.0)

  • 配置檔參數改為:log_bin=mysql-bin、server_id=1 (Master)、server_id=2 (Slave)、gtid_mode=ON、enforce_gtid_consistency=ON。
  • 動態配置複寫來源:CHANGE MASTER TO MASTER_HOST='10.1.1.1', MASTER_USER='replicate', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1; (GTID 模式)。
  • 監控:SHOW REPLICA STATUS\G (8.0 重命名)。

系列導覽

  1. (一)單向主從配置全流程 ← 當前篇
  2. (二)雙主互備配置、相互授權、應用層連線邏輯初版
  3. (三)改進連線程序、容錯切換、負載均衡考量、生產建議
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved