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

MySQL 主從複制配置完整指南:GTID 模式、雙主架構、故障切換與監控

     編輯:MySQL 資料庫相關知識

基礎單向複制配置

主庫

[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_expire_logs_seconds = 604800  -- 7 天

-- 建立複制用戶
CREATE USER 'repl'@'%' IDENTIFIED BY 'strong_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

從庫

[mysqld]
server-id = 2
log_bin = mysql-bin
relay_log = relay-bin
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = 1
super_read_only = 1

-- 設定主庫連線(GTID 模式無需檔案/位置)
CHANGE MASTER TO
    MASTER_HOST = '10.0.0.1',
    MASTER_USER = 'repl',
    MASTER_PASSWORD = 'strong_pass',
    MASTER_AUTO_POSITION = 1;

START SLAVE;

雙主 / 多主架構

-- 兩台互為主從
-- Server A: server-id=1, auto_increment_offset=1, auto_increment_increment=2
-- Server B: server-id=2, auto_increment_offset=2, auto_increment_increment=2

-- 防衝突:唯一鍵業務層保證,或用 Galera Cluster / Group Replication

關鍵監控指令

SHOW SLAVE STATUS 關鍵欄位

Slave_IO_Running: Yes          -- IO 執行緒(接收 Binlog)
Slave_SQL_Running: Yes         -- SQL 執行緒(重放)
Seconds_Behind_Master: 0       -- 延遲秒數
Last_IO_Error:                 -- IO 錯誤詳情
Last_SQL_Error:                -- SQL 錯誤詳情
Retrieved_Gtid_Set:            -- 已接收 GTID 集合
Executed_Gtid_Set:             -- 已執行 GTID 集合

常見故障處理

指令用途
SHOW MASTER STATUS主庫 Binlog 位置/GTID
SHOW SLAVE STATUS\G從庫完整狀態(核心)
SHOW SLAVE HOSTS主庫查看已連線從庫
SHOW BINLOG EVENTS解析 Binlog 事件
SHOW RELAYLOG EVENTS解析 Relay Log

高可用架構升級

  • MHA:Manager + Node,自動故障切換(Perl)
  • Orchestrator:拓撲管理、自動遷移、Web UI(Go)
  • Group Replication:官方多主 Paxos 協議(5.7.17+)
  • InnoDB Cluster:Group Replication + Router + Shell 整合方案

備份策略整合

-- 從庫備份不影響主庫
mysqldump --single-transaction --master-data=2 --gtid-purged=ON ...

-- 還原後同步
CHANGE MASTER TO MASTER_AUTO_POSITION=1;
START SLAVE UNTIL SQL_AFTER_GTIDS='gtid_set';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
故障診斷處理
IO 執行緒停止Last_IO_Error: connection refused檢查網路、防火牆、主庫 bind-address、用戶權限
SQL 執行緒停止Last_SQL_Error: Duplicate entrySET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 或修復數據衝突
延遲過大Seconds_Behind_Master > 300檢查長事務、大查詢、從庫硬體、parallel replication
GTID 不一致Executed_Gtid_Set 缺漏重新同步:RESET SLAVE; CHANGE MASTER TO ... MASTER_AUTO_POSITION=1