萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL xtrabackup/innobackupex 熱備份與增量恢復實戰指南

為什麼選擇 XtraBackup?

當數據量超 10GB,mysqldump 導出導入耗時過長,且會阻塞寫入(需 --single-transaction 才不阻塞 InnoDB)。Percona XtraBackup 支援 **InnoDB 熱備份(不加鎖)**、**增量備份**、**流式傳輸**、**壓縮**,是大數據量生產環境的標準備份工具。

組件架構

  • xtrabackup:C 語言二進制,僅備份 InnoDB/XtraDB 表,核心引擎。
  • innobackupex:Perl 腳本封裝 xtrabackup,**同時支援 InnoDB 與 MyISAM**(MyISAM 階段需短暫全局讀鎖),新增 --slave-info、--stream 等便捷參數。

生產建議直接使用 innobackupex。

安裝與前置配置

1. 安裝 Percona XtraBackup

# 下載對應 OS/MySQL 版本的 RPM/DEB
# 例如 CentOS 7 + MySQL 5.7
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install -y percona-xtrabackup-24  # 2.4 系列支援 MySQL 5.7/8.0

# 依賴包自動解決:perl-Time-HiRes, perl-DBD-MySQL, libaio 等

版本匹配關鍵: XtraBackup 2.2 不支援 MySQL 5.1.73,報錯 Unsupported server version。請嚴格對照 官方兼容性矩陣 選版本。

2. 必備 my.cnf 配置

[mysqld]
datadir=/var/lib/mysql          # 必須顯式指定,否則還原報錯 "Please set parameter 'datadir'"
innodb_log_file_size=50M        # 若備份報錯 "log file size different",需與實際 ib_logfile 大小一致

全量備份與恢復

1. 全量備份(不影響讀寫)

# 備份到本地目錄(會生成時間戳子目錄)
innobackupex --defaults-file=/etc/my.cnf --user=root /backup/full/

# 單庫備份
innobackupex --defaults-file=/etc/my.cnf --user=root --database=db_name /backup/full/

# 流式備份 + 壓縮直傳遠端(節省本地磁碟)
innobackupex --defaults-file=/etc/my.cnf --user=root --stream=tar /backup/ | gzip > /backup/full_$(date +%F_%H-%M-%S).tar.gz
# 或直接 SSH 遠端
innobackupex --defaults-file=/etc/my.cnf --user=root --stream=tar /backup/ | ssh user@remote "cat > /remote/backup/full_$(date +%F).tar.gz"

2. 全量恢復(需停庫)

systemctl stop mysqld
mv /var/lib/mysql /var/lib/mysql_bak_$(date +%F)
mkdir -p /var/lib/mysql

# 1) 準備備份 (redo log 重放,使數據文件一致)
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /backup/full/2024-01-15_10-30-00/

# 2) 拷貝回數據目錄
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /backup/full/2024-01-15_10-30-00/

# 3) 修正權限並啟動
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

增量備份與恢復

原理:基於 LSN (Log Sequence Number) 推進。首次全量備份記錄 to_lsn,後續增量只備份 LSN 大於上次的頁。

1. 增量備份鏈

# 基於全量備份做第一次增量
innobackupex --defaults-file=/etc/my.cnf --user=root \
  --incremental-basedir=/backup/full/2024-01-15_10-30-00 \
  --incremental /backup/incr/

# 基於上一次增量做第二次增量
innobackupex --defaults-file=/etc/my.cnf --user=root \
  --incremental-basedir=/backup/incr/2024-01-15_12-00-00 \
  --incremental /backup/incr/

2. 查看 LSN 鏈驗證

cat /backup/full/2024-01-15_10-30-00/xtrabackup_checkpoints
# backup_type = full-prepared
# from_lsn = 0
# to_lsn = 23853959

cat /backup/incr/2024-01-15_12-00-00/xtrabackup_checkpoints
# backup_type = incremental
# from_lsn = 23853959
# to_lsn = 23854112

3. 增量恢復(合併到全量再恢復)

# 1) 準備全量基礎 (--redo-only 只重做,不回滾未提交事務)
innobackupex --apply-log --redo-only /backup/full/2024-01-15_10-30-00/

# 2) 合併第一次增量
innobackupex --apply-log --redo-only /backup/full/2024-01-15_10-30-00/ \
  --incremental-dir=/backup/incr/2024-01-15_12-00-00/

# 3) 合併第二次增量 (最後一次可不加 --redo-only)
innobackupex --apply-log /backup/full/2024-01-15_10-30-00/ \
  --incremental-dir=/backup/incr/2024-01-15_14-00-00/

# 4) 恢復同全量流程:--copy-back → chown → start mysqld

常用參數速查表

參數說明
--defaults-file指定 my.cnf 路徑,必須包含 [mysqld] datadir
--apply-log相當於 xtrabackup --prepare,重做 redo log 使備份一致
--copy-back將備份文件拷貝回 datadir
--incremental啟用增量備份模式
--incremental-basedir指定上一次備份目錄(全量或增量)
--redo-only增量合併時只 redo,不 undo,必須加在除最後一次外的所有合併步驟
--stream=tar流式輸出,配合 gzip/ssh 遠程備份
--tmpdir流式備份時 xtrabackup_logfile 臨時目錄,防止 /tmp 爆滿
--throttle=IOS限制每秒 I/O 操作數,減輕備份對業務影響
--slave-info備份 Slave 時記錄 Master 位點,生成 xtrabackup_slave_info 便於重做 Slave
--include=REGEXP只備份匹配的表,如 --include="db.tbl1|db.tbl2"
--databases=LIST指定備份的庫列表,空格分隔
--use-memory=#prepare 階段 InnoDB 實例內存限制,大備份建議設 1G+

避坑與最佳實踐

  • 單庫/單表恢復不直接支援: 官方工具只能全量恢復。單表恢復需:全量恢復到臨時實例 → mysqldump 導出 → 導入生產庫。
  • 備份驗證機制: 定期(如每週)自動恢復到測試環境並校驗數據完整性(pt-table-checksum)。
  • 備份加密: xtrabackup 2.4+ 支援 --encrypt=AES256,保護備份文件安全。
  • 監控備份耗時與大小: 納入監控體系,異常告警。

總結

XtraBackup/innobackupex 是 MySQL 物理熱備份的工業標準。掌握 全量 → 增量鏈 → --apply-log --redo-only 合併 → --copy-back 恢復 核心流程,配合流式傳輸、節流、驗證機制,可構建 RPO 接近 0、RTO 可控的企業級備份體系。

copyright © 萬盛學電腦網 all rights reserved