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

Windows 下 MySQL 自動備份腳本:批處理實現每日增量歸檔

     編輯:MySQL 資料庫相關知識

Windows 環境下利用批處理 + 任務計劃實現 MySQL 每日自動備份,保留 6 代歸檔,含服務狀態檢測與自動啟動邏輯。

核心腳本 dbBackup.bat


@echo off
REM ===== 配置區 =====
SET MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 5.7\bin"
SET BACKUP_DIR=D:\MySQL_Backup
SET DB_USER=root
SET DB_PASS=your_password
SET RETENTION_DAYS=6
REM ===================

cd /d %BACKUP_DIR%

REM 1. 檢測 MySQL 服務狀態 (3306 端口監聽)
netstat -na | find "0.0.0.0:3306" | find "LISTENING" > server.log
fc server.log nul >nul
IF ERRORLEVEL 1 (
    ECHO [INFO] MySQL 服務未運行,嘗試啟動...
    net start MySQL57
    IF ERRORLEVEL 1 (
        ECHO [ERROR] MySQL 啟動失敗,備份中止
        GOTO END
    )
)

REM 2. 執行備份 (帶日期時間戳)
SET DATE_STAMP=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
SET TIME_STAMP=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
SET BACKUP_FILE=%BACKUP_DIR%\backup_%DATE_STAMP%_%TIME_STAMP%.sql

%MYSQL_BIN%\mysqldump.exe -u%DB_USER% -p%DB_PASS% --all-databases --single-transaction --routines --triggers --events > %BACKUP_FILE%

REM 3. 壓縮備份文件
"C:\Program Files\7-Zip\7z.exe" a -tzip %BACKUP_FILE%.zip %BACKUP_FILE%
DEL %BACKUP_FILE%

REM 4. 清理舊備份 (保留最近 %RETENTION_DAYS% 天)
FORFILES /P %BACKUP_DIR% /M backup_*.zip /D -%RETENTION_DAYS% /C "cmd /c DEL @path"

:END
ECHO [INFO] 備份任務結束 %DATE% %TIME%

關鍵技術點解析

部署為計劃任務

  1. 控制面板 → 管理工具 → 任務計劃程序 → 創建基本任務
  2. 觸發器:每日 02:00(低峰期)
  3. 操作:啟動程序 cmd.exe,參數 /c D:\Scripts\dbBackup.bat
  4. 勾選「不管用戶是否登錄都要運行」+「使用最高權限運行」

進階增強建議

  • 備份完成後上傳至雲存儲(AWS S3 / 阿里云 OSS / Azure Blob)實現異地容災
  • 引入 mysqldump --master-data=2 記錄 Binlog 位點,支持基於時間點恢復 (PITR)
  • 添加郵件/企業微信/鉚釘通知(成功/失敗/耗時/文件大小)
  • 定期演練恢複演練,驗證備份可用性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模塊技術要點
服務檢測netstat + find 組合判斷 3306 端口 LISTENING 狀態,fc 比較文件差異決定 ERRORLEVEL
日期時間戳%DATE:~0,4% 等切片提取年月日,避免地區格式差異建議用 wmic os get localdatetime 更穩健
mysqldump 參數--single-transaction (InnoDB 熱備)、--routines/triggers/events (完整對象)
壓縮工具7-Zip 命令行版,壓縮率高、免費、支持命令行
舊文件清理FORFILES /D -N 按修改時間刪除 N 天前文件