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

MySQL 複寫全解析 (一):架構原理、安裝配置、資料克隆與故障診斷

     編輯:MySQL 資料庫相關知識

相較 MongoDB、Redis 等 NoSQL 複寫,MySQL 複寫架構較為複雜。本文系統梳理複寫原理、主從配置、資料初始化、關鍵日誌含義,為故障排查打基礎。

複寫架構原理

  1. 主庫將資料變更寫入 Binary Log (Binlog)
  2. 從庫 I/O Thread 連接主庫讀取 Binlog,寫入本地 Relay Log (中繼日誌)
  3. 從庫 SQL Thread 讀取 Relay Log 重放,實現資料同步

MySQL 複寫架構圖

三組關鍵日誌座標 (SHOW SLAVE STATUS)

座標組欄位含義
下一個傳輸的 BinlogMaster_Log_File, Read_Master_Log_PosI/O Thread 已讀取至主庫 Binlog 的位置
下一個執行的 BinlogRelay_Master_Log_File, Exec_Master_Log_PosSQL Thread 已重放至主庫 Binlog 的位置
下一個執行的 Relay LogRelay_Log_File, Relay_Log_PosSQL Thread 已讀取至本地 Relay Log 的位置

理解這三組座標對故障診斷 (如主從延遲、同步中斷、GTID 遷移) 至關重要。

主庫配置 (/etc/my.cnf)

[mysqld]
server_id = 100
log_bin = mysql-bin
log_bin_index = mysql-bin.index
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 1
  • server_id 全域唯一,避免衝突
  • 建議顯式指定 log_bin,防主機名變更導致檔名改變
  • 後三項為安全性選項 (非複寫必須),確保 Binlog 持久化

從庫配置 (/etc/my.cnf)

[mysqld]
server_id = 200
log_bin = mysql-bin
log_bin_index = mysql-bin.index
relay_log = mysql-relay-bin
relay_log_index = mysql-relay-bin.index
read_only = 1
skip_slave_start = 1
log_slave_updates = 1
  • read_only=1 防誤寫入 (SUPER 權限用戶除外)
  • skip_slave_start=1 防止啟動自動複寫,便於手動控制
  • log_slave_updates=1 從庫記錄 Binlog,利於後續提升為主庫

資料初始化:克隆主庫資料

MyISAM 表

mysqldump --all-databases --master-data=1 > data.sql

InnoDB 表 (熱備份)

mysqldump --all-databases --single-transaction --master-data=1 > data.sql

大資料量優化:直接拷貝資料檔

  1. 主庫鎖表:FLUSH TABLES WITH READ LOCK;
  2. 記錄座標:SHOW MASTER STATUS; (記下 File & Position)
  3. MyISAM 直接拷貝資料目錄;InnoDB 必須先停止 MySQL 服務 再拷貝,否則檔案不一致
  4. 將檔案複製到從庫資料目錄,解鎖主庫:UNLOCK TABLES;

後續將介紹複寫故障診斷、GTID、多源複寫等進階主題。

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