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

CentOS 7 MySQL 5.7 主從複制搭建詳解(GTID + XtraBackup)

     編輯:MySQL 資料庫相關知識

架構規劃

角色IPServer ID備註
Master192.168.1.101寫入節點
Slave192.168.1.202讀取/備份節點

1. Master 配置(/etc/my.cnf)


[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
datadir = /var/lib/mysql
character-set-server = utf8mb4
systemctl restart mysqld

2. 建立複制帳號


CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;

3. Slave 配置(/etc/my.cnf)


[mysqld]
server-id = 2
log-bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = 1
relay-log = relay-bin
read-only = 1
super-read-only = 1
datadir = /var/lib/mysql
character-set-server = utf8mb4
systemctl restart mysqld

4. 使用 XtraBackup 熱備份建立 Slave 初始數據


# Master 執行(需安裝 percona-xtrabackup-24)
innobackupex --user=root --password='xxx' --stream=xbstream --parallel=4 /tmp/ | ssh 192.168.1.20 "xbstream -x -C /var/lib/mysql/"

# Slave 端
innobackupex --apply-log /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
systemctl start mysqld

XtraBackup 會自動在 xtrabackup_binlog_info 記錄 GTID 執行集合,無需手動 CHANGE MASTER TO MASTER_LOG_FILE/POS。

5. 啟動複制(GTID 模式)


CHANGE MASTER TO
  MASTER_HOST='192.168.1.10',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_pass',
  MASTER_AUTO_POSITION=1;  -- 關鍵:啟用 GTID 自動定位
START SLAVE;

6. 驗證


SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx

7. 常見問題

  • Seconds_Behind_Master 持續增大 → 檢查 Slave 機器規格、innodb_flush_log_at_trx_commit、網路延遲。
  • GTID 不一致報錯 → RESET MASTER; RESET SLAVE ALL; 重新同步。
  • 防火牆阻擋 3306 → 雙向放行。

8. 監控腳本(Nagios/Zabbix)


#!/bin/bash
IO=$(mysql -N -e "SHOW SLAVE STATUS" | awk '{print $11}')
SQL=$(mysql -N -e "SHOW SLAVE STATUS" | awk '{print $12}')
LAG=$(mysql -N -e "SHOW SLAVE STATUS" | awk '{print $33}')
[ "$IO" = "Yes" ] && [ "$SQL" = "Yes" ] && [ "$LAG" -lt 30 ] && echo "OK" || echo "CRITICAL: IO=$IO SQL=$SQL LAG=$LAG"

GTID + XtraBackup 是現代 MySQL 主從搭建的標準組合,簡單、可靠、支援故障自動定位。

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