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

MySQL 自動備份 Shell 腳本:每日增量、保留五天、支援多種備份模式

     編輯:MySQL 資料庫相關知識

腳本特性

  • 支援 mysqldump、mysqlhotcopy、tar(冷備份)三種模式
  • 自動清理 5 天前舊備份
  • 單日單次執行,配合 crontab 定時運行
  • 詳細日誌記錄

完整腳本 auto_db_backup.sh

#!/bin/bash
# MySQL Auto Backup Script
# 保留最近 5 天備份,每日執行一次

# ========== 使用者配置區 ==========
DBName="mysql"           # 要備份的資料庫名
DBUser="root"            # 資料庫用戶
DBPasswd=""              # 密碼(空則不加 -p)
BackupPath="/root/"      # 備份檔存放目錄
LogFile="/root/db.log"   # 日誌檔
DBPath="/var/lib/mysql/" # 資料目錄(tar 模式用)
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] Backup File Exists, Skip!" >> $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

echo "-------------------------------------------" >> $LogFile

部署與排程


chmod +x auto_db_backup.sh
# 測試執行
./auto_db_backup.sh

# 加入 crontab 每天凌晨 2:30 執行
crontab -e
30 2 * * * /root/auto_db_backup.sh

三種模式選擇指南

模式適用場景優點缺點
mysqldump中小資料庫、需跨版本遷移邏輯備份、可編輯、相容性強大資料庫較慢、需鎖表
mysqlhotcopyMyISAM 表、本機備份速度快、不停服務僅支援 MyISAM、需本機執行
tar (冷備份)InnoDB/MyISAM 混合、追求最簡單檔案級複製、最完整需停機、備份窗口長

進階擴充建議

  • 加入 gpg 加密備份檔
  • 使用 rsync/scp 異地備份
  • 整合 mysqlbinlog 做增量備份(PITR)
  • 監控備份成功與否,失敗發送郵件/簡訊告警
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved