首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL 自動備份 Shell 腳本(支援定時、保留最近 5 天)

     編輯:PHP 相關知識

腳本功能

  • 支援三種備份方式:mysqldump、mysqlhotcopy、tar(直接打包數據目錄)。
  • 每天僅執行一次,自動刪除 5 天前的舊備份文件。
  • 記錄詳細操作日誌,便於排查問題。
  • 可通過 crontab 設置為凌晨自動運行。

完整腳本代碼

#!/bin/bash
# This is a Shell Script For Auto DB Backup
# Powered by aspbiz
# 2004-09

# ===== 配置區 =====
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
# BackupMethod=mysqldump
# BackupMethod=mysqlhotcopy
BackupMethod=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

# 刪除舊備份
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 is 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 -czf $NewFile $DumpFile
            rm -f $DumpFile
            ;;
        mysqlhotcopy)
            mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $BackupPath
            cd $BackupPath
            tar -czf $NewFile $DBName
            rm -rf $DBName
            ;;
        tar)
            tar -czf $NewFile $DBPath
            ;;
        *)
            echo "Unknown BackupMethod: $BackupMethod" >> $LogFile
            exit 1
            ;;
    esac
    echo "[$NewFile] Backup Success!" >> $LogFile
fi

部署步驟

  1. 將腳本保存為 /root/auto_backup.sh,授予執行權限:
    chmod +x /root/auto_backup.sh
  2. 編輯 crontab -e,添加定時任務(每天凌晨 2:30 執行):
    30 2 * * * /root/auto_backup.sh
  3. 確保 BackupPath 目錄可寫,且 MySQL 服務運行中。

注意事項

  • tar 方式需停止寫入或鎖表,否則可能備份不一致;生產環境建議用 mysqldump --single-transaction(InnoDB)或 mysqlhotcopy(MyISAM)。
  • 日誌文件 db.log 會持續增長,建議定期清理或配置 logrotate。
  • 密碼為空時 -p 參數不可加空格,腳本中已做判斷處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved