首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 自動化備份 Bash 腳本:極簡部署、定時執行、壓縮加密

     編輯:MySQL 資料庫相關知識

腳本核心功能

  • 逐庫匯出(mysqldump --opt --lock-all-tables)
  • 自動排除系統庫(information_schema、mysql、test)
  • 按日期建立目錄、檔名含時間戳、gzip 壓縮
  • 僅需設定 5 個參數即可運行

關鍵參數設定

BACKUPDIR="/path/to/backup"   # 備份根目錄
MUSER="backup_user"           # MySQL 備份帳號
MPASS="strong_password"       # 密碼
MHOST="127.0.0.1"             # 主機 IP
MPORT="3306"                  # 埠號

完整腳本(可直接存為 mysql_backup.sh)

#!/bin/bash
NOW=$(date +"%Y-%m")
BACKUPDIR="${BACKUPDIR}/${NOW}"
MUSER="backup_user"
MPASS="strong_password"
MHOST="127.0.0.1"
MPORT="3306"
IGNOREDB="information_schema mysql test"

MYSQL=$(which mysql)
MYSQLDUMP=$(which mysqldump)
GZIP=$(which gzip)

[ ! -d "$BACKUPDIR" ] && mkdir -p "$BACKUPDIR"

DBS=$($MYSQL -u "$MUSER" -p"$MPASS" -h "$MHOST" -P "$MPORT" -Bse 'SHOW DATABASES')
NOW=$(date +"d%dH%HM%MS%S")  # 日-時-分-秒

for db in $DBS; do
    DUMP="yes"
    for i in $IGNOREDB; do
        [ "$db" = "$i" ] && DUMP="no" && break
    done
    if [ "$DUMP" = "yes" ]; then
        FILE="${BACKUPDIR}/${NOW}-${db}.gz"
        echo "BACKING UP $db"
        $MYSQLDUMP --add-drop-database --opt --lock-all-tables \
            -u "$MUSER" -p"$MPASS" -h "$MHOST" -P "$MPORT" "$db" \
            | $GZIP > "$FILE"
    fi
done

部署與自動化

  1. chmod a+x mysql_backup.sh
  2. 手動測試:./mysql_backup.sh
  3. 加入 crontab 每日備份:
    crontab -e → @daily /path/to/mysql_backup.sh

進階強化建議

  • 加密:管線接 openssl enc -aes-256-cbc -k "key"
  • 異地備份:rsync 或 scp 推送至遠端/雲端儲存
  • 保留策略:find $BACKUPDIR -mtime +30 -delete 保留 30 天
  • 監控告警:腳本回傳碼非 0 時發送郵件/Slack 通知
  • 權限最小化:備份帳號僅需 SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER 權限
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved