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

MySQL 自動備份 Shell 腳本(每日增量、保留 5 天)

     編輯:MySQL 資料庫相關知識

腳本特性

  • 放入 crontab 每日凌執行一次
  • 支援三種備份方式:tar(默認)、mysqldump、mysqlhotcopy
  • 自動刪除 5 天前備份,保留最近 5 份
  • 詳細日志記錄

完整腳本(auto_db_backup.sh)

#!/bin/bash
# Auto MySQL Backup Script
# 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] Backup File Exists, Skip!" >> $LogFile
    exit 0
fi

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)
        tar czvf $NewFile $DBPath >> $LogFile 2>&1
        echo "[$NewFile] Backup Success!" >> $LogFile
        ;;
    *)
        echo "Unknown BackupMethod: $BackupMethod" >> $LogFile
        exit 1
        ;;
esac

部署步驟

  1. 保存為 /root/auto_db_backup.sh,chmod +x。
  2. 編輯 crontab -e:
    0 2 * * * /root/auto_db_backup.sh (每天 02:00 執行)
  3. 觀察 /root/db.log 確認運行狀態。

備份方式選擇建議

方式優點缺點適用場景
tar最簡單、無需停服務(若為 MyISAM 需鎖表)InnoDB 需停服務或配合 LVM 快照小型 MyISAM 庫、測試環境
mysqldump邏輯備份、跨版本/引擎遷移方便大庫導出/導入慢中小型庫、異構遷移
mysqlhotcopy物理複製極快、僅 MyISAM不支援 InnoDB、需鎖表大型純 MyISAM 庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved