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

MySQL 備份腳本:每日全量 + 自動清理 5 天前舊檔

     編輯:MySQL 資料庫相關知識

生產級 MySQL 每日備份 Shell 腳本:壓縮、日誌、自動留存

腳本核心功能

  • 遍歷匹配前綴的多個資料庫(ls | grep idss)
  • mysqldump --opt 導出 → tar gzip 壓縮
  • 檔名含時間戳:dbname-YYYYMMDD-HHMM.sql.tgz
  • 自動刪除 5 天前同前綴備份檔
  • 完整日誌記錄:開始/結束時間、檔名、成功/失敗
  • 失敗可選郵件告警(需 mailutils)

完整腳本


#!/bin/bash
USER=root
PASSWORD=cucrzmysql
BACKUP_DIR=/mysql_bak
LOGFILE=/mysql_bak/data_backup.log

for DATABASE in $(ls /mysql/data/mysql/ | grep idss); do
    DATE=$(date '+%Y%m%d-%H%M')
    DATE_5=$(date -d "-5 day" +%Y%m%d)
    DUMPFILE=$DATABASE-$DATE.sql
    ARCHIVE=$DATABASE-$DATE.sql.tgz

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

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

    cd $BACKUP_DIR
    rm -rf $DATABASE-$DATE_5*   # 清理 5 天前舊檔

    mysqldump --opt $DATABASE -u$USER -p$PASSWORD > $DUMPFILE

    if [[ $? == 0 ]]; then
        tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
        echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
        rm -f $DUMPFILE
    else
        echo "Database Backup Fail!" >> $LOGFILE
        # mail -s "Database:$DATABASE Daily Backup Fail" $WEBMASTER
    fi

    echo "Backup Process Done"
done

部署建議


# crontab -e
0 2 * * * /path/backup.sh >/dev/null 2>&1  # 每日 02:00 執行

進階優化

  • 改用 --single-transaction(InnoDB 一致性)
  • 上傳至異地存儲(S3/OSS/NFS)
  • 加入校驗和驗證(md5sum)
  • 監控備份檔大小突變告警
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved