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

MySQL 簡易自動備份 Shell 腳本(保留 5 天)

     編輯:MySQL 資料庫相關知識

腳本特色

  • 每日單次執行,保留最近 5 天備份。
  • 支援三種備份模式:mysqldump(邏輯)、mysqlhotcopy(實體熱備)、tar(冷備份,需停服務)。
  • 內建日誌記錄、舊檔自動清理、重複備份檢查。

完整腳本 auto_db_backup.sh

#!/bin/bash
# 設定區
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
BackupMethod=tar   # 可選 mysqldump / mysqlhotcopy / tar

NewFile=${BackupPath}db$(date +%y%m%d).tgz
DumpFile=${BackupPath}db$(date +%y%m%d)
OldFile=${BackupPath}db$(date +%y%m%d --date='5 days ago').tgz

echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile

# 刪除 5 天前舊備份
if [ -f $OldFile ]; then
    rm -f $OldFile >> $LogFile 2>&1
    echo "[$OldFile] Delete Old File Success!" >> $LogFile
else
    echo "[$OldFile] No Old Backup File!" >> $LogFile
fi

# 避免重複備份
if [ -f $NewFile ]; then
    echo "[$NewFile] The Backup File exists, Can't Backup!" >> $LogFile
else
    case $BackupMethod in
        mysqldump)
            if [ -z $DBPasswd ]; then
                mysqldump -u $DBUser --opt $DBName > $DumpFile
            else
                mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
            fi
            tar czvf $NewFile $DumpFile >> $LogFile 2>&1
            echo "[$NewFile] Backup Success!" >> $LogFile
            rm -rf $DumpFile
            ;;
        mysqlhotcopy)
            rm -rf $DumpFile
            mkdir $DumpFile
            if [ -z $DBPasswd ]; then
                mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
            else
                mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >> $LogFile 2>&1
            fi
            tar czvf $NewFile $DumpFile >> $LogFile 2>&1
            echo "[$NewFile] Backup Success!" >> $LogFile
            rm -rf $DumpFile
            ;;
        *)  # tar 冷備份
            /etc/init.d/mysqld stop >/dev/null 2>&1
            tar czvf $NewFile ${DBPath}${DBName} >> $LogFile 2>&1
            /etc/init.d/mysqld start >/dev/null 2>&1
            echo "[$NewFile] Backup Success!" >> $LogFile
            ;;
    esac
fi

部署步驟

  1. 修改設定區變數(資料庫名、帳密、路徑、備份模式)。
  2. chmod +x auto_db_backup.sh
  3. 測試執行:./auto_db_backup.sh
  4. 加入 crontab -e:
    0 3 * * * /path/auto_db_backup.sh

模式選擇建議

模式優點缺點適用場景
mysqldump跨版本/引擎可移植、不停機大庫較慢、鎖表影響寫入中小型、需異地/跨版本還原
mysqlhotcopy僅鎖表不停機、速度快僅支援 MyISAM、本機檔案系統MyISAM 為主、本機快速備份
tar (冷備份)最簡單、檔案級完整需停機、跨版本風險高可接受停機窗口、純 MyISAM
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved