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

Windows 批次檔實作 MySQL 自動備份與還原

     編輯:MySQL 資料庫相關知識

前言

在 Windows 環境下,結合 mysqldump 與批次檔(.bat)即可建立排程自動備份、記錄日誌並驗證備份完整性。本文提供可直接使用的 backup.bat 與 recovery.bat 範本。

一、backup.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\":檢查輸出檔尾部標記,確認備份正常結束。

二、recovery.bat:指定檔案還原

@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

注意事項

  1. 還原前請確認目標資料庫已存在(CREATE DATABASE IF NOT EXISTS test;)。
  2. mysqldump 備份會包含 View,但 不包含 Stored Procedure / Function(儲於 mysql.proc),需額外備份 mysql 系統庫。
  3. 生產環境建議搭配 Windows 工作排程器,每日固定時間執行 backup.bat。

總結

兩支批次檔涵蓋「備份→驗證→記錄」與「還原→記錄」完整流程,修改參數區即可部署。搭配 --single-transaction 即可在不停機情況下完成 InnoDB 熱備份。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved