腳本功能特色
- 支援多資料庫一次備份(空白分隔)
- 自動建立日期時間命名目錄(
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<密碼> | 加密檔頭與資料,免輸入密碼即可解壓 |
排程自動化(工作排程器)
- 開啟「工作排程器」→ 建立基本工作
- 觸發條件:每日 / 每週 / 自訂
- 動作:啟動程式
cmd.exe,引數 /c D:\Scripts\backup_mysql.bat
- 勾選「無論使用者是否登入都要執行」、以最高權限執行
常見問題排查
- 「找不到 mysqldump」: 確認
MYSQL_BIN 路徑正確,或將 MySQL bin 目錄加入系統 PATH。
- 中文亂碼: 在腳本開頭加
chcp 65001 切換至 UTF-8 代碼頁。
- 備份檔過大: 改用
--single-transaction --quick --compress 參數配合 gzip 流式壓縮,避免產生巨大中間檔。