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

MySQL 自動化備份腳本:全量備份與增量清理完整實作

     編輯:MySQL 綜合教學

腳本功能特性

  • 遍歷指定前綴資料庫(如 idss*)逐庫備份
  • mysqldump --single-transaction --flush-logs 確保一致性與二進位日誌切換
  • 備份檔以 庫名-YYYYMMDD-HHMM.sql.tgz 命名,自動壓縮與清理原始 SQL
  • 自動刪除 5 天前同庫備份檔,控制磁碟佔用
  • 詳細日誌記錄(開始/結束時間、成功/失敗、檔案大小)
  • 失敗時可擴展郵件告警(需 mailutils)

核心腳本(DBFullyBak.sh)

#!/bin/bash
# MySQL 全量備份腳本 - 每週執行一次
# 需配合 crontab: 0 3 * * 0 /root/DBFullyBak.sh

USER=root
PASSWORD=your_strong_password
BACKUP_DIR=/mysql_bak
LOGFILE=${BACKUP_DIR}/data_backup.log
DATE=$(date '+%Y%m%d-%H%M')

# 確保備份目錄存在
mkdir -p "${BACKUP_DIR}"

# 遍歷符合前綴的資料庫
for DATABASE in $(ls /mysql/data/mysql/ | grep '^idss'); do
    DUMPFILE="${DATABASE}-${DATE}.sql"
    ARCHIVE="${DUMPFILE}.tgz"

    echo "" >> "${LOGFILE}"
    echo "----------------------" >> "${LOGFILE}"
    echo "BACKUP DATE: $(date '+%Y-%m-%d %H:%M:%S')" >> "${LOGFILE}"
    echo "----------------------" >> "${LOGFILE}"

    cd "${BACKUP_DIR}"

    # 刪除 5 天前備份
    DATE_5=$(date -d "-5 day" '+%Y%m%d')
    rm -rf "${DATABASE}-${DATE_5}"*

    # 執行備份(單一事務 + 刷新日誌)
    mysqldump --opt --single-transaction --flush-logs \
        -u"${USER}" -p"${PASSWORD}" "${DATABASE}" > "${DUMPFILE}"

    if [[ $? -eq 0 ]]; then
        tar czf "${ARCHIVE}" "${DUMPFILE}" >> "${LOGFILE}" 2>&1
        echo "[${ARCHIVE}] Backup Successful!" >> "${LOGFILE}"
        rm -f "${DUMPFILE}"
    else
        echo "Database Backup Fail!" >> "${LOGFILE}"
        # mail -s "DB:${DATABASE} Backup Failed" admin@example.com
    fi
done

echo "Backup Process Done"

關鍵參數說明

參數作用
--single-transactionInnoDB 熱備份核心,取得一致性快照不鎖表
--flush-logs備份前切換 binlog,配合增量備份使用
--opt啟用快速導出優化(含鎖表、延遲插入等),InnoDB 下配合 single-transaction 實際不鎖表
tar czfgzip 壓縮,節省 60%+ 空間

增量備份配合策略

全量備份週日執行,週一至週六每日增量備份(複製新生成的 mysql-bin.*)。全量備份時 --flush-logs --delete-master-logs 會清空舊 binlog,增量腳本需在全量備份之後運行或協調好 binlog 索引。

部署檢查清單

  1. 建立專用備份帳號,僅授予 SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, RELOAD, REPLICATION CLIENT 權限。
  2. 密碼存放於 ~/.my.cnf(chmod 600)避免腳本明文洩露。
  3. 測試還原流程:tar xzf xxx.tgz | mysql -u root -p db。
  4. 監控磁碟空間,設定告警閾值(如 80%)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved