Windows 環境下 MySQL 自動備份最輕量方案:mysqldump + .bat + 任務排程器。本文提供生產可用腳本模板,並系統整理 mysqldump 常用參數與還原指令速查表。
生產級備份 BAT 腳本
@echo off
REM ========== 配置區 ==========
SET MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe"
SET DB_USER=root
SET DB_PASS=your_strong_password
SET DB_NAME=my_database
SET BACKUP_ROOT=D:\MySQL_Backup
SET CHARSET=utf8mb4
REM ==============================
SET YMD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
SET HMS=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
SET HMS=%HMS: =0%
SET BACKUP_DIR=%BACKUP_ROOT%\%YMD%
SET BACKUP_FILE=%BACKUP_DIR%\%DB_NAME%_%YMD%_%HMS%.sql
mkdir "%BACKUP_DIR%" 2>nul
echo [%DATE% %TIME%] 開始備份 %DB_NAME% ...
%MYSQL_BIN% --opt --single-transaction --routines --triggers --events \
--default-character-set=%CHARSET% -u%DB_USER% -p%DB_PASS% %DB_NAME% > "%BACKUP_FILE%"
IF %ERRORLEVEL% NEQ 0 (
echo [%DATE% %TIME%] 備份失敗,錯誤碼 %ERRORLEVEL%
exit /b 1
)
REM 可選:壓縮備份檔(需 7-Zip 安裝)
REM "C:\Program Files\7-Zip\7z.exe" a -tzip "%BACKUP_FILE%.zip" "%BACKUP_FILE%" && del "%BACKUP_FILE%"
echo [%DATE% %TIME%] 備份完成:%BACKUP_FILE%
echo 檔案大小:
dir /-c "%BACKUP_FILE%" | findstr /v "Volume Directory"
關鍵參數解析
| 參數 | 作用 | 建議 |
--opt | 啟用快速導出組合(含 --add-drop-table、--lock-tables 等) | 預設開啟,保留 |
--single-transaction | InnoDB 熱備份,不鎖表,保證一致性 | InnoDB 必加 |
--routines --triggers --events | 備份存儲過程、觸發器、事件 | 生產環境必加 |
--default-character-set | 指定連線字符集,防止中文亂碼 | 設為 utf8mb4 |
--master-data=2 | 輸出 CHANGE MASTER TO 註解,支援從庫搭建 | 主庫備份加上 |
--compress | 客戶端-伺服器傳輸壓縮 | 遠端備份啟用 |
任務排程器設定步驟
- 控制台 → 系統與安全 → 管理工具 → 工作排程器。
- 右側「建立基本工作」→ 名稱:
MySQL_Daily_Backup → 每日 → 時間:凌晨 03:00(低峰)。
- 動作:啟動程式 → 程式:
cmd.exe → 引數:/c "D:\Scripts\backup_mysql.bat"。
- 完成後右鍵任務 → 內容 → 條件/設定:勾選「如果工作失敗,每 10 分鐘重試 3 次」。
- 以最高權限執行(避免寫入備份目錄權限不足)。
mysqldump 進階用法速查表
| 需求 | 指令 |
| 備份單表 | mysqldump -u root -p db tbl > tbl.sql |
| 備份多表 | mysqldump -u root -p db tbl1 tbl2 > multi.sql |
| 帶 DROP TABLE(可覆蓋還原) | mysqldump --add-drop-table -u root -p db > backup.sql |
| 直接壓縮輸出 | mysqldump -u root -p db | gzip > backup.sql.gz |
| 僅備份結構(無資料) | mysqldump --no-data -u root -p db > struct.sql |
| 備份多個資料庫 | mysqldump --databases db1 db2 db3 > multi_db.sql |
| 備份所有資料庫 | mysqldump --all-databases > all.sql |
還原指令速查
| 場景 | 指令 |
| 標準還原 | mysql -u root -p db < backup.sql |
| 還原壓縮檔 | gunzip < backup.sql.gz | mysql -u root -p db |
| 跨伺服器直接遷移 | mysqldump -u root -p db | mysql -h new_host -u root -p db |
進階備份策略建議
- 分層保留: 每日全備保留 7 天、每週全備保留 4 週、每月全備保留 12 月。
- 異地複製: 腳本結尾加入
rclone copy 或 aws s3 cp 推送至雲端儲存。
- 驗證機制: 定期自動還原至測試庫,跑
CHECKSUM TABLE 對比來源。
- 監控告警: 備份腳本回傳非 0 碼時發送郵件/企業微信/Slack 通知。
一個 50 行的 BAT 腳本 + 任務排程器,即可構建企業級 MySQL 自動備份體系。關鍵在於:**單一事務熱備份、字符集顯式指定、壓縮異地、定期驗證**。