首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

XtraBackup 與 innobackupex 熱備份 MySQL 實戰詳解(含增量、遠程、壓縮)

     編輯:MySQL 綜合教學

核心概念

  • xtrabackup:C 語言工具,僅備份 InnoDB/XtraDB,真正熱備(不鎖表)。
  • innobackupex:Perl 包裝腳本,支援 MyISAM (需短暫鎖表) 與混合引擎,操作更友善。

核心原理:**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   # 增量備份必須

xtraBackup 常用參數速查

參數用途
--backup執行備份
--prepare備份後應用 redo log (需執行 2 次)
--target-dir備份儲存路徑
--incremental-basedir增量基準目錄
--incremental-dir增量備份輸出/合併目錄
--stream=tar流式輸出 (配合遠程/壓縮)
--throttle=IOPS限流,減輕業務影響
--tmpdir指定臨時目錄 (防 /tmp 爆滿)

備份與還原實戰

1. 全量備份 + 還原

# 備份
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

2. 增量備份鏈 (基於 LSN)

# 基準全量
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,增量依賴此值。

3. innobackupex 全庫備份 (含 MyISAM)

# 普通備份
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

遠程備份方案

方案一:SSH 流式傳輸

innobackupex --stream=tar /backup/ | ssh user@remote "cat > /data/backup.tar"

方案二:Netcat 高速傳輸

# 備份端 (推送)
innobackupex --stream=tar --throttle=500 /backup/ | nc remote_ip 1234

# 接收端 (監聽)
nc -d -l 1234 > /data/backup.tar

增量備份遠程痛點與替代

xtrabackup 增量備份**不支援直接流式遠程**,建議:

  1. 掛載 NFS/網路磁碟到本地,備份寫入掛載點。
  2. 本地備份完成後,用 rsync/rsyncd 推送增量檔。

生產環境建議清單

  • ✅ 固定 --tmpdir 到大磁碟,防 xtrabackup_logfile 撐爆 /tmp
  • ✅ 使用 --throttle 限流,核心業務時段備份不搶 IO
  • ✅ 定期演練還原,驗證備份可用性與 RTO
  • ✅ 監控 xtrabackup_checkpoints LSN 連續性,防斷點
  • ✅ 結合 Percona XtraBackup 2.4+ (支援 MySQL 5.7/8.0、壓縮、加密、部分備份)

掌握 XtraBackup/innobackupex,即擁有企業級 MySQL 熱備與災難恢復能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved