Percona XtraBackup 是 InnoDB 熱備份事實標準,支援非阻塞備份、增量備份、流式傳輸、壓縮、遠程備份。本文提供生產級標準化操作手冊。
xtrabackup:核心二進制,備份 InnoDB/XtraDB 數據文件、redo log。innobackupex(5.7 前)/ xtrabackup --backup(8.0+ 整合):Perl 包裝,支援 MyISAM、系統表、結構導出。yum install percona-xtrabackup-80(匹配 MySQL 8.0)或官網下載二進制包。| 模式 | 命令範例 | 適用場景 |
|---|---|---|
| 本地目錄 | xtrabackup --backup --target-dir=/backup/full_$(date +%F) --user=root --password=xxx | 常規備份 |
| 流式打包 | xtrabackup --backup --stream=xbstream --target-dir=/backup | gzip > /backup/full_$(date +%F).xbstream.gz | 跨機房傳輸、存儲壓縮 |
| 遠程直接備份 | xtrabackup --backup --stream=xbstream | ssh user@remote "xbstream -x -C /backup/remote_dir" | 無本地磁盤空間、異地備份 |
| 指定庫/表 | --databases="db1 db2.t1" | 多租戶、僅備份核心業務庫 |
# 基準:完整備份 LSN 記錄在 xtrabackup_checkpoints
# 第 1 次增量
xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full_20240101
# 第 2 次增量(基於上一次增量)
xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
# LSN 遞增原理:每頁 LSN > 基準 LSN 則備份該頁
注意:增量僅針對 InnoDB;MyISAM 仍為完整複製。
systemctl stop mysqld && rm -rf /var/lib/mysql/*。
xtrabackup --prepare --target-dir=/backup/full_20240101
# 若有增量:依次應用
xtrabackup --prepare --target-dir=/backup/full_20240101 --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/full_20240101 --incremental-dir=/backup/inc2
xtrabackup --copy-back --target-dir=/backup/full_20240101 --datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
| 參數 | 作用 | 建議值 |
|---|---|---|
--compress | 快速壓縮(LZ4) | 節省 50-70% 空間,CPU 開銷低 |
--compress-threads | 壓縮線程數 | CPU 核心數 / 2 |
--encrypt=AES256 | 備份加密 | 配合 --encrypt-key 或 --encrypt-key-file |
--throttle | 限流 IOPS | 如 100 (MB/s),避免影響線上業務 |
--parallel | 並發複製文件數 | 4-8,視磁盤併發能力 |
innobackupex 已併入 xtrabackup,8.0 直接用 xtrabackup --backup。
#!/bin/bash
set -euo pipefail
FULL_DIR="/backup/full_$(date +%F)"
xtrabackup --backup --target-dir="$FULL_DIR" --compress --compress-threads=4 --parallel=4 --throttle=200
# 上傳至對象存儲 / 異地
# 保留策略:保留 7 天全備 + 30 天增量
find /backup -type d -mtime +30 -name 'inc*' -exec rm -rf {} +
XtraBackup + 定時任務 + 異地存儲 + 定期恢復演練,構建 MySQL 數據安全鐵三角。