在 Windows 環境下,結合 mysqldump 與批次檔(.bat)即可建立排程自動備份、記錄日誌並驗證備份完整性。本文提供可直接使用的 backup.bat 與 recovery.bat 範本。
@echo off
rem === 參數區 ===
set mydate=%date:~0,4%%date:~5,2%%date:~8,2%
set savePath=E:\bat\
set logPath=E:\bat\
set databaseName=test
set user=root
set pwd=123456
set host=localhost
rem === 寫入日誌表頭 ===
echo ===========================================================================>> %logPath%backup.log
echo backup time:%mydate% %time:~0,5%>> %logPath%backup.log
echo backup file path:%savePath%%mydate%.sql>> %logPath%backup.log
echo backup database: %databaseName%>> %logPath%backup.log
set starttime=%time:~0,11%
echo start time: %starttime%>> %logPath%backup.log
rem === 執行備份(InnoDB 熱備份) ===
mysqldump -h %host% -u%user% -p%pwd% --single-transaction --default-character-set=utf8mb4 %databaseName% > %savePath%%mydate%.sql
rem 非 InnoDB 可用下行替換:
rem mysqldump -h %host% -u%user% -p%pwd% --default-character-set=utf8mb4 %databaseName% > %savePath%%mydate%.sql
set endtime=%time:~0,11%
echo end time: %endtime% >> %logPath%backup.log
rem === 驗證備份完整性 ===
type %savePath%%mydate%.sql | find "-- Dump completed"
if %errorlevel% EQU 0 (
echo congratulations ,backup success >> %logPath%backup.log
) else (
echo sorry,backup fail,please check >> %logPath%backup.log
)
echo ===========================================================================>> %logPath%backup.log
--single-transaction:InnoDB 熱備份,不鎖表、取得一致性快照。--default-character-set=utf8mb4:確保中文/Emoji 正確匯出。find \"-- Dump completed\":檢查輸出檔尾部標記,確認備份正常結束。@echo off
set mydate=%date:~0,4%%date:~5,2%%date:~8,2%
set filePath=E:/bat/20100528.sql
set logPath=E:/bat/
set databaseName=test
set user=root
set pwd=123456
set host=localhost
echo ===========================================================================>>%logPath%recovery.log
echo recovery time:%mydate% %time:~0,5%>> %logPath%recovery.log
echo recovery file: %filePath%>> %logPath%recovery.log
echo backup database: %databaseName%>>%logPath%recovery.log
set starttime=%time:~0,11%
echo start time: %starttime%>> %logPath%recovery.log
mysql -h %host% -u%user% -p%pwd% %databaseName% --default-character-set=utf8mb4 -q < %filePath%
set endtime=%time:~0,11%
echo end time: %endtime% >> %logPath%recovery.log
echo ===========================================================================>>%logPath%recovery.log
CREATE DATABASE IF NOT EXISTS test;)。mysqldump 備份會包含 View,但 不包含 Stored Procedure / Function(儲於 mysql.proc),需額外備份 mysql 系統庫。backup.bat。兩支批次檔涵蓋「備份→驗證→記錄」與「還原→記錄」完整流程,修改參數區即可部署。搭配 --single-transaction 即可在不停機情況下完成 InnoDB 熱備份。