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

MySQL 數據庫同步實戰:主從單向、雙主熱備、配置文件與故障恢復全流程

     編輯:MySQL 綜合教學

MySQL Replication 實戰部署:從配置到運行維護的完整筆記

環境:Windows 2000 + MySQL 4.0.4-beta-max-nt-log (示例版本),原理通用於 5.x/8.x。

架構模式對比

模式拓撲用途衝突風險
主從單向A → B讀寫分離、備份、報表無 (單寫入點)
雙主熱備A ⇄ B高可用、雙活寫入高 (需自增錯開、業務路由)
鏈式複製A → B → C多級讀擴展無
星型複製A → B/C/D一主多從無

核心配置參數


# Master 必備
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = sync_db          # 僅同步指定庫 (可選)
# binlog-ignore-db = mysql      # 排除系統庫

# Slave 必備
[mysqld]
server-id = 2
master-host = 10.10.10.22
master-user = repl
master-password = replpass
master-port = 3306
master-connect-retry = 60
replicate-do-db = sync_db
replicate-ignore-db = mysql
relay-log = relay-bin
log-slave-updates = 1           # 鏈式/雙主必開
read-only = 1                   # 防止誤寫入

部署步驟 (主從單向)

  1. 雙方創建複製賬號:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave_ip' IDENTIFIED BY 'pass';
  2. Master 執行 FLUSH TABLES WITH READ LOCK;,記錄 SHOW MASTER STATUS (File, Position)。
  3. Master 導出數據 (mysqldump --single-transaction --master-data=2 或物理打包)。
  4. Slave 導入數據,設置 CHANGE MASTER TO ... MASTER_LOG_FILE='...', MASTER_LOG_POS=...;
  5. Slave START SLAVE;,驗證 SHOW SLAVE STATUS\G 兩個 Yes、Seconds_Behind_Master=0。

雙主熱備擴展


# 在 Master (A) 追加 Slave 配置
master-host = 10.10.10.53
master-user = repl
master-password = replpass
replicate-do-db = sync_db
master-connect-retry = 10

# 在 Slave (B) 追加 Master 配置
log-bin = mysql-bin
binlog-do-db = sync_db

防衝突鐵律:

  • auto_increment_offset (A=1, B=2) + auto_increment_increment (2)。
  • 業務層單寫入路由 (如寫 A、讀 B),或按用戶分片路由。
  • 監控 Seconds_Behind_Master、Slave_*_Running、Binlog 傳輸延遲。

故障處理 SOP

關鍵文件說明

  • master.info:Slave 記錄 Master 連接信息、Binlog 位置。**修改 Slave 配置前必須刪除此文件**,否則配置不生效。
  • relay-log.info:Relay Log 執行進度。
  • *.err:錯誤日誌,排查首選。

測試驗證


-- Master 寫入
INSERT INTO sync_db.test VALUES (1, 'from master');
-- Slave 秒級可查
SELECT * FROM sync_db.test;
-- 批量壓測:B 插入 1872000 行,A 每秒同步 ~2500 行 (受限於單線程 SQL 重放)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
故障現象處理
IO 線程掛起Slave_IO_Running=No檢查網絡/防火牆/賬號/主機名/DNS;telnet master 3306
SQL 線程報錯Slave_SQL_Running=NoSHOW SLAVE STATUS\G 看 Last_Error;主鍵衝突→手動修復/跳過;結構差異→同步 DDL
延遲過大Seconds_Behind_Master > 阈值優化慢查詢、升級 Slave 硬體、開啟並行複製 (5.6+ slave_parallel_workers)
Binlog 丟失Slave 要求的 Binlog 已被 PURGE重新同步基線 (重做步驟 2-5),調大 expire_logs_days