XtraBackup 是 InnoDB 熱備份神器,支持非阻塞全量/增量備份、流式傳輸、壓縮、並行操作。本文記錄 yum 安裝、全量/增量備份命令、備份預處理(apply-log)、還原恢復(copy-back)全流程。
Yum 自動配置源:
rpm -Uhv https://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm yum list | grep percona # 驗證源可用
或手動編寫 /etc/yum.repos.d/percona.repo。安裝:yum install xtrabackup。
創建低權限備份用戶:
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost' IDENTIFIED BY '123'; FLUSH PRIVILEGES;
執行全量備份到 /tmp:
innobackupex --user=root --password=root --socket=/tmp/mysql.sock \ --defaults-file=/usr/local/mysql/my.cnf /tmp
備份完成會生成時間戳目錄,包含數據文件、xtrabackup_checkpoints、xtrabackup_info 等元數據。
基於上一次全量/增量備份目錄:
# 第一次增量(基於全量 /tmp/2024-01-01_00-00-00) innobackupex --user=root --password=root --socket=/tmp/mysql.sock \ --defaults-file=/usr/local/mysql/my.cnf \ --incremental /root/inc1 --incremental-basedir=/tmp/2024-01-01_00-00-00 # 第二次增量(基於第一次增量 /root/inc1) innobackupex --user=root --password=root --socket=/tmp/mysql.sock \ --defaults-file=/usr/local/mysql/my.cnf \ --incremental /root/inc2 --incremental-basedir=/root/inc1
步驟 1:預處理(apply-log) —— 重放已提交事務、回滾未提交事務,使數據文件達到一致狀態。
# 全量備份預處理 innobackupex --apply-log --use-memory=4G /tmp/2024-01-01_00-00-00 # 增量備份合併:依次將增量應用到全量 innobackupex --apply-log --redo-only /tmp/2024-01-01_00-00-00 --incremental-dir=/root/inc1 innobackupex --apply-log --redo-only /tmp/2024-01-01_00-00-00 --incremental-dir=/root/inc2 # 最後一次不加 --redo-only innobackupex --apply-log --use-memory=4G /tmp/2024-01-01_00-00-00
步驟 2:複製回數據目錄 —— 目標目錄必須為空。
innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf /tmp/2024-01-01_00-00-00
修正數據目錄權限 chown -R mysql:mysql /var/lib/mysql,啟動 MySQL 即可。