從庫是讀寫分離、備份卸載、故障轉移候選的核心角色。本文基於 GTID 模式(MySQL 5.6+),提供標準化搭建清單,涵蓋主庫配置、權限、數據初始化、CHANGE MASTER、驗證監控。
server-id 唯一、log-bin 啟用、gtid_mode=ON-- my.cnf [mysqld]
server-id=100
log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
log-slave-updates=1 # 從庫也開啟,支援鏈式
-- 建立複寫專用帳號
CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY 'StrongReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G
-- 記錄 File、Position(非 GTID 模式需用)
-- GTID 模式下無需位點,自動定位
# 主庫
mysqldump --single-transaction --master-data=2 --all-databases \
--routines --triggers --events -u root -p > full_backup.sql
# 傳輸到從庫
scp full_backup.sql replica:/backup/
# 從庫導入
mysql -u root -p < /backup/full_backup.sql
# 主庫備份
xtrabackup --backup --target-dir=/backup/full --user=root --password=xxx --slave-info
# 準備備份
xtrabackup --prepare --target-dir=/backup/full
# 傳輸到從庫 datadir,修正權限
rsync -av /backup/full/ replica:/data/mysql/
chown -R mysql:mysql /data/mysql
# 從庫啟動前建立 auto.cnf (server-uuid)
# 或啟動後自動生成
# 從庫安裝 clone 插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
# 從庫執行克隆(自動獲取 GTID、配置、數據)
CLONE INSTANCE FROM 'repl'@'master_host':3306 IDENTIFIED BY 'password'
DATA DIRECTORY=/data/mysql; -- 目標目錄需為空
-- my.cnf [mysqld]
server-id=101
log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
relay-log=relay-bin
log-slave-updates=1
read_only=1
super_read_only=1 # 8.0+ 更嚴格
-- 重啟從庫
systemctl restart mysqld
-- GTID 模式啟動複寫(無需指定 File/Position)
CHANGE MASTER TO
MASTER_HOST='192.168.0.232',
MASTER_USER='repl',
MASTER_PASSWORD='StrongReplPass123!',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
-- 核心指標必須為 Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-- 關鍵延遲指標
Seconds_Behind_Master: 0
-- GTID 執行進度
Retrieved_Gtid_Set: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:1-1000
Executed_Gtid_Set: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:1-1000
Auto_Position: 1
| 故障 | 現象 | 處理 |
|---|---|---|
| IO 線程掛掉 | Slave_IO_Running: No / Connecting | 檢查網路、防火牆、帳號密碼、主庫 Binlog 存在性 |
| SQL 線程掛掉 | Slave_SQL_Running: No / Last_Error 有內容 | 查 Last_Error,常見主鍵衝突、外鍵失敗、字符集不匹配 |
| GTID 不一致 | Executed_Gtid_Set 缺少主庫已執行事務 | 重新初始化數據、或用 SET GTID_PURGED 修正 (極謹慎) |
| 延遲過大 | Seconds_Behind_Master > 300 | 從庫硬體升級、多線程複寫 slave_parallel_workers=4、大事務拆分 |
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; -- 跳過 1 個事件
START SLAVE;
-- 或 GTID 模式
SET GTID_NEXT='aaaa-bbbb-cccc:1234'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC;
rpl_semi_sync_master=ON、rpl_semi_sync_slave=ON,降低 RPOSeconds_Behind_Master、Slave_*_Running、Relay_Log_Space、Executed_Gtid_Set 差異pt-table-checksum 校驗主從一致性log-slave-updatesGTID 模式是現代 MySQL 複寫標準:自動定位、故障轉移簡單、拓撲變更安全。新搭建從庫強制要求 GTID。搭建只是開始,監控、演練、自動化故障轉移才是高可用體系的核心。