核心原理:**WAL + Crash Recovery**。備份過程複製 .ibd 頁面並同步追蹤 redo log,還原時通過 redo log 將不一致頁面前滾至一致狀態。
# 二進位包部署
mkdir /usr/local/xtrabackup
tar -zxvf xtrabackup-1.6.tar.gz -C /usr/local/xtrabackup
ln -s /usr/local/xtrabackup/bin/innobackupex-1.5.1 /usr/local/xtrabackup/bin/innobackupex
export PATH=$PATH:/usr/local/xtrabackup/bin
# my.cnf 關鍵設定
[mysqld]
datadir=/usr/local/mysql/var
default_table_type=InnoDB # 增量備份必須
| 參數 | 用途 |
|---|---|
| --backup | 執行備份 |
| --prepare | 備份後應用 redo log (需執行 2 次) |
| --target-dir | 備份儲存路徑 |
| --incremental-basedir | 增量基準目錄 |
| --incremental-dir | 增量備份輸出/合併目錄 |
| --stream=tar | 流式輸出 (配合遠程/壓縮) |
| --throttle=IOPS | 限流,減輕業務影響 |
| --tmpdir | 指定臨時目錄 (防 /tmp 爆滿) |
# 備份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/backup/full
# 還原準備 (執行兩次 --prepare)
xtrabackup --prepare --target-dir=/backup/full
xtrabackup --prepare --target-dir=/backup/full
# 還原
rm -rf /var/lib/mysql/ib*
cp /backup/full/ib* /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
service mysql start
# 基準全量
xtrabackup --backup --target-dir=/backup/base
# 第 1 次增量
xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
# 第 2 次增量 (可疊加在 inc1 或 base)
xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
# 還原合併
xtrabackup --prepare --target-dir=/backup/base
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
xtrabackup --prepare --target-dir=/backup/base
# 複製 ib* 回 datadir 即可
注意:xtrabackup_checkpoints 記錄 to_lsn,增量依賴此值。
# 普通備份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxx \
--no-lock /backup/innobackupex/
# 打包備份 (需 tar4ibd 在 PATH)
innobackupex --stream=tar /backup/ > /backup/full.tar
# 壓縮備份
innobackupex --stream=tar /backup/ | gzip > /backup/full.tar.gz
# 還原
innobackupex --apply-log /backup/innobackupex/2024-01-01_12-00-00/
innobackupex --copy-back /backup/innobackupex/2024-01-01_12-00-00/
chown -R mysql:mysql /var/lib/mysql
service mysql start
innobackupex --stream=tar /backup/ | ssh user@remote "cat > /data/backup.tar"
# 備份端 (推送)
innobackupex --stream=tar --throttle=500 /backup/ | nc remote_ip 1234
# 接收端 (監聽)
nc -d -l 1234 > /data/backup.tar
xtrabackup 增量備份**不支援直接流式遠程**,建議:
--tmpdir 到大磁碟,防 xtrabackup_logfile 撐爆 /tmp--throttle 限流,核心業務時段備份不搶 IOxtrabackup_checkpoints LSN 連續性,防斷點掌握 XtraBackup/innobackupex,即擁有企業級 MySQL 熱備與災難恢復能力。