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

MySQL 物理熱備神器 XtraBackup 完整實戰:全量/增量備份、壓縮流式傳輸、Binlog 增量恢復、Innobackupex 封裝腳本

     編輯:MySQL 綜合教學

一、XtraBackup 核心優勢

  • Percona 開源、免費、企業級物理熱備工具
  • 支持 InnoDB/XtraDB/MyISAM,真熱備 (不鎖表、不阻塞寫入)
  • 原生增量備份 (基於 LSN)、壓縮、加密、流式傳輸、並行拷貝
  • 替代商業 InnoDB Hot Backup,大數據集 (TB 級) 首選

二、核心組件

工具角色適用場景
xtrabackup底層引擎,僅備份 InnoDB/XtraDB純 InnoDB 環境、自動化腳本調用
innobackupexPerl 封裝腳本,集成 xtrabackup,支持 MyISAM (需全局讀鎖)混合引擎、生產環境標準入口

安裝包含:xtrabackup, xtrabackup_55, xtrabackup_56, innobackupex (兼容 1.5.1 軟鏈接)

三、xtrabackup 核心參數速查

參數說明
--defaults-file指定 my.cnf 路徑 (讀取 datadir、innodb_log_* 等)
--backup執行備份
--prepare備份後應用 Redo Log 使數據一致 (相當於崩潰恢復)
--target-dir備份文件存放目錄
--incremental-basedir增量備份基準目錄 (全量或上級增量)
--incremental-dir準備階段指定增量目錄合併
--stream=tar流式輸出 tar 流 (配合管道壓縮/遠程傳輸)
--throttle限制 IOPS (每秒 I/O 操作數),減輕業務影響
--use-memoryPrepare 階段緩衝池大小
--tables正則匹配表名 (file-per-table 模式)

四、實戰一:xtrabackup 全量備份與恢復 (純 InnoDB)

1. 備份腳本

#!/bin/bash
# xtra_full_backup.sh
DATE=$(date +%F)
BAK_DIR="/data/xtrabak/full_${DATE}"
mkdir -p ${BAK_DIR}
echo "Backup begin $(date)"
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=${BAK_DIR}
# 手動拷貝 .frm 結構文件 (xtrabackup 不備份)
cp -r /var/lib/mysql/test ${BAK_DIR}/
echo "Backup end $(date)"

2. 恢復腳本

#!/bin/bash
# xtra_full_prepare.sh
DATE=$(date +%F)
BAK_DIR="/data/xtrabak/full_${DATE}"
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=${BAK_DIR}
cp -r ${BAK_DIR}/test/ /var/lib/mysql/
rm -f /var/lib/mysql/ib*
cp ${BAK_DIR}/ib* /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysql

五、實戰二:增量備份與恢復 (LSN 鏈)

1. 全量基準備份

mkdir -p /data/xtrabak/full_$(date +%F)
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/xtrabak/full_$(date +%F)
cp -r /var/lib/mysql/test/ /data/xtrabak/full_$(date +%F)/

2. 增量備份 (業務寫入新表後)

mkdir -p /data/xtrabak/inc_$(date +%F)
xtrabackup --defaults-file=/etc/my.cnf --backup \
  --target-dir=/data/xtrabak/inc_$(date +%F) \
  --incremental-basedir=/data/xtrabak/full_$(date +%F)
cp -r /var/lib/mysql/test/ /data/xtrabak/full_$(date +%F)/  # 同步最新結構

關鍵點:增量目錄生成 .delta 文件,僅含變更頁;xtrabackup_checkpoints 記錄 from_lsn/to_lsn。

3. 恢復:準備全量 → 合併增量 → 拷回

# 1. 準備全量 (應用 Redo Log)
xtrabackup --prepare --target-dir=/data/xtrabak/full_$(date +%F)

# 2. 合併增量到全量目錄
xtrabackup --prepare --target-dir=/data/xtrabak/full_$(date +%F) \
  --incremental-dir=/data/xtrabak/inc_$(date +%F)

# 3. 拷回數據目錄
cp -r /data/xtrabak/full_$(date +%F)/test/ /var/lib/mysql/
rm -f /var/lib/mysql/ib*
cp /data/xtrabak/full_$(date +%F)/ib* /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysql

六、實戰三:innobackupex 生產級流式壓縮備份 + Binlog 增量恢復

1. 全量備份 (流式壓縮 + 遠程傳輸)

#!/bin/bash
# backup.sh
DATE=$(date +%F)
BAK_DIR="/data/xtrabak/bak_${DATE}"
LOG_FILE="${BAK_DIR}/innobackupex_${DATE}.log"
mkdir -p ${BAK_DIR}

echo "Backup begin $(date)"
innobackupex --user=root --password=xxx --defaults-file=/etc/my.cnf \
  --stream=tar ${BAK_DIR} 2>${LOG_FILE} | gzip > ${BAK_DIR}/base.tar.gz
echo "Backup end $(date)"

# 備份配置文件
cp /etc/my.cnf /data/xtrabak/my_${DATE}.cnf

產出:base.tar.gz (壓縮流)、innobackupex.log (含 Binlog 位點)、my.cnf 備份。

2. Binlog 增量歸檔 (腳本示例)

#!/bin/bash
# binlog_bak.sh - 歸檔最近 1 小時 Binlog 到遠程 NFS
cd /var/lib/
DATE=$(date -d '-1 hour' +%Y%m%d%H00)
touch -t "${DATE}" starttemp
mount -t nfs 192.168.3.108:/logcenter /mnt_log
find /var/lib/mysql/mysql-bin.* -newer starttemp | xargs -I {} cp -p {} /mnt_log/mysql-binlog/192.168.3.28/
# umount /mnt_log

3. 恢復全流程

#!/bin/bash
# prepare.sh
DATE=$(date +%F)
PREP_DIR="/data/xtrabak/prepare_${DATE}"
mkdir -p ${PREP_DIR}

systemctl stop mysql

# 1. 解壓流式備份
tar -ixzvf /data/xtrabak/bak_${DATE}/base.tar.gz -C ${PREP_DIR}

# 2. 應用日志 (準備階段)
innobackupex --apply-log --user=root --defaults-file=/etc/my.cnf ${PREP_DIR}

# 3. 拷回數據目錄
innobackupex --copy-back --user=root --defaults-file=/etc/my.cnf ${PREP_DIR}

chown -R mysql:mysql /var/lib/mysql
rm -rf /var/lib/mysql/xtrabackup_binlog_pos_innodb
systemctl start mysql

4. Binlog 增量恢復 (定點恢復)

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