XtraBackup 核心優勢
- 非阻塞熱備份:InnoDB 表備份過程不鎖表、不影響讀寫
- 增量備份:基於 LSN (Log Sequence Number) 僅備份變更頁,極大節省空間與時間
- 流式傳輸:支持
--stream=tar 直接輸出到遠端,解決本地磁盤不足
- 壓縮加密:
--compress、--encrypt 保障傳輸存儲安全
工具組件說明
| 工具 | 功能 | 適用場景 |
| xtrabackup | 核心二進制,僅備份 InnoDB/XtraDB | 純 InnoDB 環境、腳本集成 |
| innobackupex | Perl 封裝腳本,同時支持 InnoDB + MyISAM | 混合引擎環境、生產首選 |
源碼編譯安裝(以 2.4/8.0 版本為例)
# 依賴
yum install -y libaio libaio-devel automake autoconf bison ncurses-devel zlib-devel cmake gcc gcc-c++
# 下載編譯(官網下載對應版本源碼包)
tar xf percona-xtrabackup-8.0.30.tar.gz
cd percona-xtrabackup-8.0.30
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/xtrabackup
make -j$(nproc) && make install
# 關鍵軟鏈(滿足 innobackupex 調用)
ln -s /usr/local/xtrabackup/bin/xtrabackup /usr/bin/xtrabackup
cp innobackupex /usr/bin/innobackupex
核心參數速查
| 參數 | 說明 | 階段 |
| --backup | 執行備份 | 備份 |
| --prepare | 備份數據一致性恢復(redo log apply) | 恢復前 |
| --target-dir | 備份存放目錄 | 備份/恢復 |
| --incremental-basedir | 增量基準全量備份目錄 | 增量備份 |
| --incremental-dir | 增量備份目錄(prepare 時指定) | 增量恢復 |
| --apply-log | innobackupex 等價 --prepare | 恢復前 |
| --copy-back | 將備份文件拷回 datadir | 恢復 |
| --stream=tar | 流式輸出 tar 格式 | 備份 |
| --throttle=IOPS | 限制 IO 併發,減輕業務影響 | 備份 |
| --slave-info | 記錄主庫 Binlog 位置,便於重建從庫 | 備份 |
實戰操作流程
全量備份 + 恢復
# 1. 全量備份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxx \
--no-timestamp --target-dir=/backup/full_$(date +%F) /backup/
# 2. 恢復準備(必須步驟,應用 redo log 使數據一致)
innobackupex --apply-log --defaults-file=/etc/my.cnf /backup/full_2024-01-15/
# 3. 停庫、清空 datadir、拷回、改權、啟庫
systemctl stop mysqld
rm -rf /var/lib/mysql/*
innobackupex --copy-back --defaults-file=/etc/my.cnf /backup/full_2024-01-15/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
增量備份策略
# 基於上次全量備份做增量
innobackupex --incremental --incremental-basedir=/backup/full_2024-01-15 \
--target-dir=/backup/incr_2024-01-15_02 /backup/
# 增量恢復:先 prepare 基準,再 apply 增量
innobackupex --apply-log --redo-only /backup/full_2024-01-15/
innobackupex --apply-log --redo-only /backup/full_2024-01-15/ --incremental-dir=/backup/incr_2024-01-15_02/
# 多級增量依次 apply,最後再執行一次無 --redo-only 的 prepare
遠程流式備份(跨機房異地容災)
# 本地壓縮流式傳輸到遠端
innobackupex --stream=tar --compress --target-dir=/tmp \
/backup/ | ssh user@dr-host "cat > /dr_backup/xtrabackup_$(date +%F).tar.gz"
# 遠端解壓恢復
ssh user@dr-host "cd /dr_backup && tar xzfi xtrabackup_2024-01-15.tar.gz"
# 後續 prepare、copy-back 流程同本地
生產環境最佳實踐
- 備份窗口:業務低峰期(如 02:00-04:00)
- 保留策略:全量保留 7 天、增量保留 2 天、異地同步保留 30 天
- 校驗機制:每週隨機抽取 1 組備份在測試環境
prepare + copy-back 驗證可用性
- 監控告警:備份耗時、文件大小、LSN 增長異常、磁盤剩餘空間
XtraBackup 是 InnoDB 熱備份的事實標準,配合合理的全量/增量/異地策略,構建 RPO=0、RTO 可控的數據保護體系。