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

MySQL 主從複製搭建全流程:從配置到驗證的完整實踐

     編輯:MySQL 綜合教學

架構目標

實現一主一從異步複製,讀寫分離降低主庫壓力,從庫承擔備份與分析查詢,故障時可手動/自動切換提升可用性。

環境準備

角色IPServer IDMySQL 版本
Master192.168.4.19115.7.x
Slave192.168.4.19225.7.x

第一階段:Master 配置

# /etc/my.cnf [mysqld] 區塊
server-id = 1
log-bin = mysql-bin
binlog-format = ROW                # 推薦 ROW 格式,數據一致性最高
binlog-do-db = business_db         # 只同步業務庫
binlog-ignore-db = mysql,sys,performance_schema,information_schema
sync_binlog = 1                    # 每次提交刷盤,最安全
innodb_flush_log_at_trx_commit = 1
gtid_mode = ON                     # 5.6+ 推薦啟用 GTID
enforce_gtid_consistency = ON
log-slave-updates = ON             # 鏈式複製必備

systemctl restart mysqld

創建複製賬號

CREATE USER 'repl'@'192.168.4.%' IDENTIFIED BY 'StrongPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.4.%';
FLUSH PRIVILEGES;

獲取同步坐標

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 | 528      | business_db  | mysql,sys,...    |
+------------------+----------+--------------+------------------+
UNLOCK TABLES;

第二階段:數據初始化(熱備份法)

# Master 打包數據目錄
tar czf /tmp/master_data.tar.gz /var/lib/mysql --exclude=*.pid --exclude=*.err --exclude=auto.cnf

# 傳輸至 Slave
scp /tmp/master_data.tar.gz 192.168.4.192:/tmp/

# Slave 解壓覆蓋(需先停止 mysqld)
systemctl stop mysqld
rm -rf /var/lib/mysql/*
tar xzf /tmp/master_data.tar.gz -C /
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

第三階段:Slave 配置與啟動

# /etc/my.cnf [mysqld]
server-id = 2
log-bin = mysql-bin
relay-log = relay-bin
read-only = 1                    # 防止誤寫入
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = ON
replicate-do-db = business_db
replicate-ignore-db = mysql,sys,performance_schema,information_schema

systemctl restart mysqld

配置複製源(GTID 模式無需文件/位置)

CHANGE MASTER TO
    MASTER_HOST = '192.168.4.191',
    MASTER_USER = 'repl',
    MASTER_PASSWORD = 'StrongPass#2024',
    MASTER_AUTO_POSITION = 1;    # GTID 自動定位

START SLAVE;

第四階段:驗證與監控

SHOW SLAVE STATUS\G
# 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_IO_Error:
Last_SQL_Error:
Master_Server_Id: 1
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx

常見故障與處理

現象原因處理
IO_Running=Connecting網絡不通/賬號密碼錯/防火牆telnet master 3306;檢查 grants;iptables
SQL_Running=No數據衝突/缺表/外鍵失敗查 Last_SQL_Error;跳過錯誤 SET GLOBAL sql_slave_skip_counter=1; START SLAVE;(謹慎)
Seconds_Behind_Master 大從庫硬件弱/大事務/長查詢阻塞優化從庫索引;並行複製 slave_parallel_workers=4
GTID 不一致手動寫入從庫/多源複製重新同步或 RESET MASTER 後重建

高可用進階:MHA / Orchestrator / GTID 自動故障轉移

生產環境建議部署 Orchestrator 管理拓撲,配合 VIP 或 ProxySQL 實現秒級故障轉移。核心原理:監控主庫心跳 → 選舉最新從庫 → 提升為新主 → 重導其他從庫 → 更新路由。

備份策略整合

  • 從庫每日 xtrabackup --slave-info 物理備份,不影響主庫
  • Binlog 定期歸檔至對象存儲,支持 PITR(時間點恢復)
  • 定期演練恢復流程,驗證 RPO/RTO

主從複製是 MySQL 高可用基石,配置規範化、監控自動化、演練常態化,才能在故障時從容應對。

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