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

Linux 下 MySQL 主從複製搭建全流程(基於 GTID 的現代配置)

     編輯:MySQL 資料庫相關知識

架構規劃

角色IPServer ID說明
Master192.168.0.2051寫入節點,開啟 binlog
Slave192.168.0.2062讀取節點,啟用 relay log

版本:MySQL 5.7+ / 8.0(推薦 GTID 模式)

Master 配置

# /etc/my.cnf.d/replication.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
gtid-mode=ON
enforce-gtid-consistency=ON
log-slave-updates=ON
# 安全:僅監聽內網
bind-address=192.168.0.205
重啟:systemctl restart mysqld

創建複製賬戶

CREATE USER 'repl'@'192.168.0.206' IDENTIFIED BY 'StrongReplPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.206';
FLUSH PRIVILEGES;

Slave 配置

# /etc/my.cnf.d/replication.cnf
[mysqld]
server-id=2
relay-log=mysql-relay
log-slave-updates=ON
gtid-mode=ON
enforce-gtid-consistency=ON
read-only=ON
bind-address=192.168.0.206
重啟:systemctl restart mysqld

建立複製鏈路

方式一:GTID 自動定位(推薦 5.7+)

CHANGE MASTER TO
  MASTER_HOST='192.168.0.205',
  MASTER_USER='repl',
  MASTER_PASSWORD='StrongReplPass!',
  MASTER_AUTO_POSITION=1;
START SLAVE;

方式二:傳統文件/位置定位(兼容舊版)

  1. Master 鎖表導出基準點:
    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS; 記錄 File、Position
    mysqldump --single-transaction --all-databases --master-data=2 > base.sql
    UNLOCK TABLES;
  2. Slave 導入:mysql < base.sql
  3. 配置同步點:
    CHANGE MASTER TO MASTER_HOST='192.168.0.205', MASTER_USER='repl', MASTER_PASSWORD='StrongReplPass!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=157;
    START SLAVE;

驗證與監控

SHOW SLAVE STATUS\G
-- 關鍵指標:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0
-- Last_IO_Error / Last_SQL_Error: 空

常見故障處理

現象排查修復
IO_Running=No網絡不通、賬戶密碼錯、Master binlog 丟失檢查防火牆、重建賬戶、Master 補全 binlog 或重新基準同步
SQL_Running=No主鍵衝突、外鍵失敗、字符集不匹配、DDL 不兼容SHOW SLAVE STATUS 看 Last_SQL_Error,SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 跳過單事務(謹慎),或重新同步
Seconds_Behind_Master 偏大Slave 硬件弱、大事務、長查詢阻塞、網絡延遲優化 Slave 索引、並行複製 slave_parallel_workers=4、升級硬件
GTID 集合斷裂Master 切換、binlog 清理、手工注入事務重新建立 GTID 基準同步

運維最佳實踐

  1. 監控告警:Prometheus mysqld_exporter 采集 mysql_slave_status_* 指標,Seconds_Behind_Master > 30 告警
  2. 備份策略:Slave 停 SQL 線程 STOP SLAVE SQL_THREAD → mysqldump --single-transaction --master-data=2 → START SLAVE SQL_THREAD,不影響 Master
  3. 延遲從庫:部署 1 條 MASTER_DELAY=3600 的延遲從庫,防誤刪/誤更新數據快速恢復
  4. 定期演練:季度切主從、模擬故障恢復、驗證備份可用性

升級到雙主/多主

  • 雙主:雙向配置 CHANGE MASTER TO,auto_increment_increment=2、auto_increment_offset=1/2 避免主鍵衝突
  • 生產建議:引入 **MHA / Orchestrator / ProxySQL** 實現自動故障轉移、讀寫分離、查詢路由
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved