XtraBackup 核心優勢
- 唯一開源支援 InnoDB/XtraDB 熱備份(不鎖表、不阻塞寫入)
- 備份過程不中斷執行中事務
- 支援壓縮、流式傳輸、增量備份、自動校驗
- 恢復速度極快(文件級複製 + Redo Log 回放)
核心工具
- xtrabackup:底層二進制,僅備份 InnoDB/XtraDB 表
- innobackupex:Perl 封裝腳本,支援全庫備份(含 MyISAM、表結構、觸發器、配置)
備份產出關鍵文件
| 文件 | 含義 |
| xtrabackup_checkpoints | 備份類型(全量/增量)、LSN 範圍、狀態 |
| xtrabackup_binlog_info | 備份時刻主庫 Binlog 文件名 + Position |
| xtrabackup_binlog_pos_innodb | InnoDB 表對應 Binlog 位置 |
| backup-my.cnf | 備份命令使用的配置參數 |
安裝部署 (Percona 官方二進制包)
wget https://www.percona.com/downloads/XtraBackup/LATEST/binary/Linux/x86_64/percona-xtrabackup-2.0.3-470.tar.gz
tar zxvf percona-xtrabackup-2.0.3-470.tar.gz
cp percona-xtrabackup-2.0.3/bin/* /usr/bin/
常用備份命令
全庫備份
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf /opt/mysql_bak/
單庫備份
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --database=test /opt/mysql_bak/
備份並壓縮打包 (流式)
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf \
--database=test --stream=tar /opt/mysql_bak/ | gzip > /opt/mysql_bak/testdb.tar.gz
帶時間戳壓縮備份
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf \
--database=test --stream=tar /opt/mysql_bak/ | gzip > /opt/mysql_bak/$(date +%F)_testdb.tar.gz
恢復流程 (關鍵:Prepare 階段)
# 1. 解壓(若為流式備份)
tar -xzf /opt/mysql_bak/2024-01-15_testdb.tar.gz -C /tmp/restore/
# 2. Prepare: 回放 Redo Log 使數據一致性 (必須步驟)
innobackupex --apply-log /tmp/restore/
# 3. 停止 MySQL、清空 datadir、複製回去
systemctl stop mysql
rm -rf /var/lib/mysql/*
innobackupex --copy-back /tmp/restore/
# 4. 修正權限、啟動
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
增量備份策略
# 基礎全量備份
innobackupex --user=root -p --defaults-file=/etc/my.cnf /backup/full/
# 增量備份 (基於上次 LSN)
innobackupex --user=root -p --defaults-file=/etc/my.cnf \
--incremental /backup/inc1/ --incremental-basedir /backup/full/2024-01-15_10-00-00/
# 恢復時:全量 prepare --apply-log --redo-only → 增量 prepare --apply-log --redo-only → 最後一個增量 prepare --apply-log
生產環境建議
- 每日全量 + 每小時增量
- 備份存異地/對象存儲
- 定期演練恢復(至少季度一次)
- 監控備份耗時、LSN 增長、磁盤空間