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

Shell 腳本實現 MySQL 定時自動備份與舊檔清理完整方案

     編輯:MySQL 綜合教學

Shell 腳本實現 MySQL 定時自動備份與舊檔清理完整方案

生產環境資料庫備份需「零人工介入、自動清理、失敗告警」。本文提供經驗證的 Shell 腳本,支援多庫備份、壓縮打包、保留策略、日誌記錄,配合 crontab 即可落地。

核心腳本邏輯

#!/bin/bash
# 配置區
DB_USER="root"
DB_PASS="123456"
DBS="blog.ewsd.cn dangjian.ewsd.cn idc.ewsd.cn shangfa.ewsd.cn"
BACKUP_PATH="/home/mysqlbackup"
RETENTION_DAYS=30

# 初始化
[ ! -d "$BACKUP_PATH" ] && mkdir -p "$BACKUP_PATH"
cd "$BACKUP_PATH"
DATE_PREFIX=$(date +%Y-%m-%d)
BACKUP_NAME="mysql_${DATE_PREFIX}"

# 逐庫備份
for DB in $DBS; do
    mysqldump -u"$DB_USER" -p"$DB_PASS" -S /tmp/mysql.sock "$DB" > "${BACKUP_NAME}_${DB}.sql"
    if [ $? -eq 0 ]; then
        echo "$(date +%Y-%m-%d) $DB mysqldump success" >> mysql.log
    else
        echo "$(date +%Y-%m-%d) $DB mysqldump failed" >> mysql.log
        exit 1
    fi
done

# 壓縮打包
tar -czf "${BACKUP_NAME}.tar.gz" *.sql
if [ $? -eq 0 ]; then
    echo "$(date +%Y-%m-%d) tar success" >> mysql.log
else
    echo "$(date +%Y-%m-%d) tar failed" >> mysql.log
    exit 1
fi

# 清理中間檔與過期備份
rm -f *.sql
OLD_BACKUP="mysql_$(date -d \"${RETENTION_DAYS} days ago\" +%Y-%m-%d).tar.gz"
rm -f "$OLD_BACKUP"

關鍵設計亮點

  • 多庫遍歷備份:單次執行覆蓋所有業務庫,避免遺漏
  • 退出碼檢查:每步驟檢查 $?,失敗即時記錄日誌並終止,防止產生損壞備份
  • 壓縮存儲:tar.gz 壓縮節省 70%+ 磁碟空間
  • 滾動保留:自動清理 N 天前備份,防止磁碟爆滿
  • 完整日誌:每步驟成功/失敗均記錄,便於事後審計

部署上線步驟

  1. 賦予執行權限:chmod +x mysql_backup.sh
  2. 加入 crontab(如每天凌晨 2 點):0 2 * * * /path/to/mysql_backup.sh
  3. 驗證首次執行日誌與備份檔完整性

安全提醒:生產環境建議使用 --defaults-extra-file 指定密碼檔,避免明文密碼出現在進程列表。

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