| 角色 | IP | Server ID | 備註 |
|---|---|---|---|
| Master | 192.168.1.10 | 1 | 寫入節點 |
| Slave | 192.168.1.20 | 2 | 讀取/備份節點 |
[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
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
[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
# 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。
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='repl_pass',
MASTER_AUTO_POSITION=1; -- 關鍵:啟用 GTID 自動定位
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx
Seconds_Behind_Master 持續增大 → 檢查 Slave 機器規格、innodb_flush_log_at_trx_commit、網路延遲。RESET MASTER; RESET SLAVE ALL; 重新同步。
#!/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 主從搭建的標準組合,簡單、可靠、支援故障自動定位。