萬盛學電腦網

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

Percona XtraBackup 2.4 备份 MySQL 5.7 实战与常见报错速查

為何升級 XtraBackup 2.4?

舊版 XtraBackup 不支援 MySQL 5.7 的熱備份特性(如 redo log 格式變更、資料字典變更)。生產環境必須升級至 2.4.x 系列(本文以 2.4.4 為例),官方下載頁:Percona XtraBackup Downloads。

安裝階段常見依賴缺失與解決

在 CentOS 6 / RHEL 6 環境下 rpm -ivh percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm 常報:

錯誤 1:libev.so.4()(64bit) is needed by ...

rpm -ivh ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm

錯誤 2:libnuma.so.1()(64bit) is needed by ...

rpm -ivh https://mirror.centos.org/centos/6/os/x86_64/Packages/numactl-2.0.9-2.el6.x86_64.rpm

裝完上述兩包即可順利安裝 XtraBackup。

生產級備份 Shell 腳本範例

以下腳本支援壓縮備份、日誌記錄、成功/失敗狀態回寫,可直接納入 crontab 定時執行。

#!/bin/bash
# MySQL 完整備份腳本
# Author: 21yunwei
# Date: 2016-10-18

TIME=$(date +%F)
LOGFILE="/data/bakup/mysql_full_bak_time.log"
FULL_LOG="/data/bakup/fullbakup_logfile.log"
BAKDIR="/data/bakup"
USER="backup_user"
PASS="strong_password"

# 目錄與日誌檔預備
[ ! -d "$BAKDIR" ] && mkdir -p "$BAKDIR"
[ ! -f "$LOGFILE" ] && touch "$LOGFILE"
[ ! -f "$FULL_LOG" ] && touch "$FULL_LOG"

# 執行備份(--compress 啟用快速壓縮,需 2.4+ 版本)
innobackupex --defaults-file=/etc/my.cnf \
             --user="$USER" --password="$PASS" \
             --compress "$BAKDIR" \
             2>&1 | tee -a "$FULL_LOG"

RET=$?
FINISH_TIME=$(date +%Y%m%d_%H%M%S)

if [ $RET -eq 0 ]; then
    echo "MySQL full backup finished, time: $FINISH_TIME" >> "$LOGFILE"
else
    echo "MySQL full backup FAILED, please check, time: $FINISH_TIME" >> "$LOGFILE"
    exit 1
fi

腳本關鍵參數解析

參數用途
--defaults-file指定 my.cnf 路徑,確保讀取正確的 datadir、socket 等設定
--compress啟用 qp(QuickLZ)即時壓縮,節省 60%~80% 備份空間,降低 I/O
2>&1 | tee -a同時將 stdout/stderr 寫入終端與日誌檔,便於即時監控與事後追溯
RET=$?捕獲 innobackupex 結束碼,非 0 視為失敗並觸發告警

備份後驗證與還原提醒

  • 備份驗證: 定期執行 innobackupex --apply-log --redo-only 模擬準備階段,確認備份集完整可用。
  • 還原前提: 必須先 --apply-log 將備份集推進到一致狀態,再 --copy-back 還原至 datadir。
  • 權限修復: 還原後執行 chown -R mysql:mysql /var/lib/mysql 避免啟動失敗。

常見坑點快速查核表

copyright © 萬盛學電腦網 all rights reserved
現象可能原因對策
Error 24: Too many open files系統 ulimit -n 過小ulimit -n 65535 或修改 /etc/security/limits.conf
備份極慢、CPU 飆高未加 --compress 或並行度未調優加 --compress --parallel=4 --throttle=200(視磁碟 IOPS 調整)
還原後 InnoDB: Log file size mismatch目標實例 innodb_log_file_size 與備份來源不一致還原前調整目標 my.cnf 使 innodb_log_file_size 一致,並刪除舊 ib_logfile*