[mysqld]
server-id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-bin
log_slave_updates = ON
binlog_format = ROW
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
datadir = /var/lib/mysql
character-set-server = utf8mb4
init_connect = 'SET NAMES utf8mb4'
systemctl restart mysqld
[mysqld]
server-id = 2
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-bin
log_slave_updates = ON
binlog_format = ROW
datadir = /var/lib/mysql
character-set-server = utf8mb4
init_connect = 'SET NAMES utf8mb4'
# 可選:只讀模式防誤寫
super_read_only = ON
systemctl restart mysqld
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
# Master 執行:打包流式傳輸到 Slave
innobackupex --stream=xbstream --user=root --password='RootPass#2024' ./ \
| ssh root@192.168.1.20 "xbstream -x -C /var/lib/mysql/"
# 或使用 tar(舊版)
innobackupex --stream=tar --user=root --password='RootPass#2024' ./ \
| ssh root@192.168.1.20 "tar xfi - -C /var/lib/mysql/"
✅ **優勢**:無需停庫、鎖表時間僅需刷新日誌與複製 .frm/.ibd 元數據(通常 < 1 秒)。
# 1. 準備備份(重做日誌應用)
innobackupex --apply-log /var/lib/mysql/
# 2. 修正擁有者
chown -R mysql:mysql /var/lib/mysql/
# 3. 啟動 MySQL
systemctl start mysqld
CHANGE MASTER TO
MASTER_HOST = '192.168.1.10',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'ReplPass#2024',
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
Master_Server_Id: 1
| 現象 | 原因 | 解決 |
|---|---|---|
| Slave_IO_Running: Connecting | 網路/防火牆/帳號密碼/bind-address | telnet master 3306、檢查安全組、驗證 repl 帳號 |
| Slave_SQL_Running: No | 執行 relay log 報錯(主鍵衝突、字符集、外鍵) | SHOW SLAVE STATUS\G 看 Last_SQL_Error,手工修復後 START SLAVE |
| Seconds_Behind_Master 偶發 NULL | IO 線程斷開 | 檢查網路抖動、master 超時設定 slave_net_timeout |
| GTID 集合不一致 | Slave 有額外寫入、或 Master 資料損壞 | 重新同步或 SET GLOBAL gtid_purged=... 修正 |
CHANGE MASTER TO MASTER_AUTO_POSITION=1 啟動同步。