萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Windows 批次腳本自動備份 MySQL 資料庫並壓縮加密

腳本功能特色

  • 支援多資料庫一次備份(空白分隔)
  • 自動建立日期時間命名目錄(YYYY-MM-DD_HHMMSS)
  • 呼叫 mysqldump 導出 SQL
  • 可選整合 WinRAR 壓縮加密(-m1 最快、-hp<密碼> 加密)
  • 備份完成自動清理原始 SQL 檔

完整腳本(backup_mysql.bat)

@echo off & setlocal ENABLEEXTENSIONS

:: ========== 使用者配置區 ==========
set BACKUP_ROOT=D:\Backup
set DATABASES=1688 abc ceshi
set DB_USER=root
set DB_PASS=root
:: MySQL bin 目錄(若已加入 PATH 可留空)
set MYSQL_BIN=D:\Progra~1\phpStudy\MySQL\bin\
:: WinRAR CLI 路徑(若不需壓縮可留空)
set WINRAR=D:\Progra~1\WinRAR\Rar.exe
set RAR_PASSWORD=YourStrongPassword
:: ===================================

:: 日期時間變數(假設系統日期格式 YYYY-MM-DD,時間 HH:MM:SS)
set YYYY=%date:~0,4%
set MM=%date:~5,2%
set DD=%date:~8,2%
set HH=%time:~0,2%
set MN=%time:~3,2%
set SS=%time:~6,2%
:: 處理時段無前導零(如 9:05 → " 9")
if "%HH:~0,1%"==" " set HH=0%HH:~1,1%

set TIMESTAMP=%YYYY%%MM%%DD%%HH%%MN%%SS%
set OUT_DIR=%BACKUP_ROOT%\%YYYY%-%MM%-%DD%_%HH%%MN%%SS%

:: 建立輸出目錄
if not exist "%OUT_DIR%" mkdir "%OUT_DIR%" 2>nul
if not exist "%OUT_DIR%" (
    echo [ERROR] 建立目錄失敗: %OUT_DIR%
    goto :EOF
)
cd /d "%OUT_DIR%"

echo [INFO] 開始備份 %DATABASES% ...
for %%D in (%DATABASES%) do (
    echo [INFO] 正在導出 %%D ...
    "%MYSQL_BIN%mysqldump.exe" -u%DB_USER% -p%DB_PASS% %%D > %%D_%TIMESTAMP%.sql
    if errorlevel 1 (
        echo [ERROR] %%D 導出失敗
        continue
    )

    if defined WINRAR (
        echo [INFO] 壓縮加密 %%D ...
        "%WINRAR%" a -k -r -s -m1 -ep1 -hp%RAR_PASSWORD% %%D_%TIMESTAMP%.rar %%D_%TIMESTAMP%.sql 2>nul
        if not errorlevel 1 (
            del /f /q %%D_%TIMESTAMP%.sql
            echo [INFO] %%D 完成: %%D_%TIMESTAMP%.rar
        ) else (
            echo [WARN] 壓縮失敗,保留 SQL 檔
        )
    )
)

echo [INFO] 所有備份完成,輸出目錄: %OUT_DIR%
pause

關鍵參數說明

參數說明
-k建立固實壓縮檔(提高修復能力)
-r加入修復記錄
-s建立自解壓縮檔(可選)
-m1壓縮等級 1(最快),可改 -m3 平衡、-m5 最高
-ep1排除基底目錄路徑,僅存檔名
-hp<密碼>加密檔頭與資料,免輸入密碼即可解壓

排程自動化(工作排程器)

  1. 開啟「工作排程器」→ 建立基本工作
  2. 觸發條件:每日 / 每週 / 自訂
  3. 動作:啟動程式 cmd.exe,引數 /c D:\Scripts\backup_mysql.bat
  4. 勾選「無論使用者是否登入都要執行」、以最高權限執行

常見問題排查

  • 「找不到 mysqldump」: 確認 MYSQL_BIN 路徑正確,或將 MySQL bin 目錄加入系統 PATH。
  • 中文亂碼: 在腳本開頭加 chcp 65001 切換至 UTF-8 代碼頁。
  • 備份檔過大: 改用 --single-transaction --quick --compress 參數配合 gzip 流式壓縮,避免產生巨大中間檔。
copyright © 萬盛學電腦網 all rights reserved