Percona XtraBackup 支援 InnoDB 熱備份,無需鎖表即可獲取一致性資料快照,是生產環境零停機建立從庫的首選工具。本文記錄完整實操流程:從主庫備份、傳輸、準備、到從庫啟動與複制建立。
innobackupex --defaults-file=/data/mysqldata/3306/my.cnf \
--user=xtrabk --password='onlybackup' \
/backup/backup_full/
備份完成後,目錄結構如 /backup/backup_full/2015-05-21_01-31-19/,包含資料檔、Redo Log、xtrabackup_binlog_info (記錄 Binlog 位置) 等關鍵檔案。
# 1. 將備份檔案傳輸至從庫資料目錄
scp -r /backup/backup_full/2015-05-21_01-31-19/* 10.1.1.18:/data/mysqldata/3307/
# 2. 在從庫執行 --apply-log (準備/回放階段)
innobackupex --apply-log /data/mysqldata/3307/data/
關鍵輸出確認: 必須看到 completed OK! 訊息,表示 Redo Log 已回放,資料檔達到一致性狀態,並產生新的 ib_logfile*。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.1.%' IDENTIFIED BY 'replsafe';
FLUSH PRIVILEGES;
# 1. 複製主庫 my.cnf 並修改 server-id、port、socket、目錄等差異項
scp my.cnf 10.1.1.18:/data/mysqldata/3307/
sed -i 's/3306/3307/g' /data/mysqldata/3307/my.cnf
echo 'server-id=2' >> /data/mysqldata/3307/my.cnf
# 2. 建立必要目錄
mkdir -p /data/mysqldata/3307/{tmp,binlog}
# 3. 啟動 MySQL
mysqld_safe --defaults-file=/data/mysqldata/3307/my.cnf &
# 1. 讀取備份集記錄的 Binlog 位置
cat /data/mysqldata/3307/data/xtrabackup_binlog_info
# 輸出範例:mysql-bin.000011 812
# 2. 在從庫執行 CHANGE MASTER TO
CHANGE MASTER TO
MASTER_HOST='10.1.1.17',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='replsafe',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=812;
# 3. 啟動複制
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標必須為 Yes:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0
-- 主庫插入測試資料
INSERT INTO test.t1 VALUES('jone');
-- 從庫立即查詢
SELECT * FROM test.t1;
-- 應包含新插入的 'jone',確認複制正常
CHANGE MASTER TO (使用 MASTER_AUTO_POSITION=1)。