架構與版本
- OS:CentOS 5.4
- MySQL:5.1.x (RPM 安裝)
- xtrabackup:1.2.22 (RPM)
- Master IP:
10.0.0.1,Slave IP:10.0.0.2
1. Master 配置(/etc/my.cnf)
[mysqld]
server-id = 1
log-bin = mysql-bin
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
datadir = /var/lib/mysql
character-set-server = utf8
init_connect = 'SET NAMES utf8'
2. Slave 配置(/etc/my.cnf)
[mysqld]
server-id = 2
datadir = /var/lib/mysql
character-set-server = utf8
init_connect = 'SET NAMES utf8'
# 5.6+ 可加:relay-log, log-slave-updates, gtid_mode=ON, enforce_gtid_consistency=ON
3. Master 建立同步帳號
GRANT REPLICATION SLAVE ON *.*
TO 'repl_user'@'10.0.0.2'
IDENTIFIED BY 'StrongReplPass!23';
FLUSH PRIVILEGES;
4. 熱備遷移資料(xtrabackup,鎖表極短)
# Master 執行:串流備份並 SSH 直接解壓到 Slave
innobackupex --stream=tar /tmp/ | ssh 10.0.0.2 "mkdir -p /tmp/db && tar xfi - -C /tmp/db/"
5. Slave 還原與啟動
# 套用日誌(prepare)
innobackupex --apply-log /tmp/db
# 複製回 datadir
innobackupex --copy-back /tmp/db
# 修正權限
chown -R mysql:mysql /var/lib/mysql/*
# 啟動 MySQL
systemctl start mysqld
6. 讀取 binlog 位點並建立同步
# 查看 xtrabackup 記錄的位點
cat /var/lib/mysql/xtrabackup_binlog_info
# 輸出範例:mysql-bin.000001 123456
# Slave 執行
CHANGE MASTER TO
MASTER_HOST='10.0.0.1',
MASTER_USER='repl_user',
MASTER_PASSWORD='StrongReplPass!23',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;
START SLAVE;
# 驗證
SHOW SLAVE STATUS\G
# 關鍵:Slave_IO_Running=Yes, Slave_SQL_Running=Yes, Seconds_Behind_Master=0
7. 監控與維護
SHOW SLAVE STATUS 定期巡檢 Seconds_Behind_Master、Last_Error。
- 忽略特定錯誤:
SET GLOBAL sql_slave_skip_counter=1; START SLAVE;(謹慎使用)。
- 5.6+ 建議啟用 **GTID**(
MASTER_AUTO_POSITION=1),免手動管理位點。
常見坑點
server-id 唯一,不可重複。
- 防火牆放行 3306(Slave→Master)。
- 字元集 Master/Slave 一致,否則同步報錯。
- 大事務導致延遲:調大
slave_pending_jobs_size_max、slave_parallel_workers (5.6+)。