使用 XtraBackup 實現 MySQL 主從復制搭建全流程實戰
環境信息
| 項目 | Master | Slave |
| OS | SuSE 11 SP1 x86_64 | SuSE 11 SP1 x86_64 |
| MySQL | 5.5.37 官方版 | 5.5.37 官方版 |
| Hostname | NDMC74 | NDMC75 |
| IP | 192.168.223.132 | 192.168.223.133 |
| Port | 3306 | 3306 |
| server-id | 1323306 | 1333306 |
| DataDir | /data/mysql/mysql3306/data | /data/mysql/mysql3306/data |
前置檢查
# 確認 server-id 唯一
SHOW VARIABLES LIKE 'server_id';
# 確認 Binlog 開啟
SHOW VARIABLES LIKE 'log_bin'; -- ON
Master 全備(XtraBackup)
innobackupex --defaults-file=/etc/my.cnf /data/backup/innobackupex
# 產生備份目錄 2014-07-31_11-20-44
# 關鍵輸出:MySQL binlog position: filename 'mysql-bin.000009', position 376
備份數據一致性處理
innobackupex --apply-log /data/backup/innobackupex/2014-07-31_11-20-44
# 完成後輸出 completed OK!
創建復制賬號
CREATE USER 'repl'@'192.168.223.%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.223.%';
傳輸備份至 Slave 並還原
# Master 上打包傳輸
scp -r /data/backup/innobackupex/2014-07-31_11-20-44 192.168.223.133:/data/backup
# Slave 停庫、替換數據目錄、授權
systemctl stop mysqld
mv /data/backup/2014-07-31_11-20-44 /data/mysql/mysql3306/data
chown -R mysql:mysql /data/mysql/mysql3306/data
systemctl start mysqld
Slave 配置復制並啟動
# 從備份目錄讀取 binlog 位點
cat /data/mysql/mysql3306/data/2014-07-31_11-20-44/xtrabackup_binlog_info
# mysql-bin.000009 376
CHANGE MASTER TO
MASTER_HOST='192.168.223.132',
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000009',
MASTER_LOG_POS=376;
START SLAVE;
SHOW SLAVE STATUS\G;
驗證關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
優勢總結
- 物理熱備,不阻塞寫入(僅最後階段短暫全局讀鎖)
- 備份速度快、壓縮率高、支持增量備份
- 還原後直接包含 Binlog 位點,無需額外
mysqldump 導入