首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Windows 下 MySQL 自動備份腳本:全量與增量備份批處理實戰

     編輯:MySQL 綜合教學

Windows 下 MySQL 自動備份腳本:全量與增量備份批處理實戰

Windows 環境下 MySQL 定時備份是中小企業常見需求。本文提供基於批處理 + WinRAR + 計劃任務的生產可用全量/增量備份方案。

一、前置準備

  • 工具:WinRAR (命令行 rar.exe)、MySQL Client (mysqldump, mysqladmin)
  • 路徑配置:安裝目錄加入 PATH 或腳本中指定完整路徑
  • 備份目錄結構:
E:\mysql_bak\
├── data\          # 臨時導出目錄
├── full\          # 全量備份存放
│   └── db_20240115.rar
└── diff\          # 增量備份存放
    └── mysql-bin_20240115.rar

二、全量備份腳本 (full_backup.bat)


@echo off
REM ===== 配置區 =====
set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
set BAK_PATH=E:\mysql_bak
set USER=root
set PASS=123456
set DBS=spirit_beast quartz_event
set RAR_PATH="C:\Program Files\WinRAR\rar.exe"
REM ===================

echo ###################################################################
echo # MySQL Full Backup - %date% %time%
echo ###################################################################

mkdir %BAK_PATH%\data 2>nul

REM 導出每個數據庫
for %%D in (%DBS%) do (
    echo 正在備份 %%D ...
    %MYSQL_PATH%\mysqldump -u%USER% -p%PASS% ^
        --single-transaction ^
        --default-character-set=utf8mb4 ^
        --flush-logs ^
        --master-data=2 ^
        --delete-master-logs ^
        --routines --triggers --events ^
        %%D > %BAK_PATH%\data\%%D_%date:~0,4%%date:~5,2%%date:~6,2%.sql
    if errorlevel 1 (
        echo %%D 備份失敗!
        exit /b 1
    )
)

REM 壓縮打包
echo 正在壓縮...
%RAR_PATH% a -ag+YYYYMMDD -m5 %BAK_PATH%\full\ %BAK_PATH%\data\*.sql
if errorlevel 1 (
    echo 壓縮失敗!
    exit /b 1
)

REM 清理臨時文件
rmdir /s /q %BAK_PATH%\data

echo %date% %time% Full backup completed >> %BAK_PATH%\backup.log
echo ###################################################################

三、增量備份腳本 (incr_backup.bat)


@echo off
REM ===== 配置區 =====
set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
set BAK_PATH=E:\mysql_bak
set USER=root
set PASS=123456
set RAR_PATH="C:\Program Files\WinRAR\rar.exe"
REM ===================

echo ###################################################################
echo # MySQL Incremental Backup - %date% %time%
echo ###################################################################

mkdir %BAK_PATH%\data 2>nul

REM 1. 刷新日志 (切換 Binlog,標記增量起點)
echo 刷新 Binlog...
%MYSQL_PATH%\mysqladmin -u%USER% -p%PASS% flush-logs
if errorlevel 1 (
    echo flush-logs 失敗!
    exit /b 1
)

REM 2. 複製新生成的 Binlog 文件
echo 複製 Binlog...
xcopy /e /c /h /y %MYSQL_PATH%\..\data\mysql-bin.* %BAK_PATH%\data\

REM 3. 壓縮打包
echo 正在壓縮...
%RAR_PATH% a -ag+YYYYMMDD -m5 %BAK_PATH%\diff\ %BAK_PATH%\data\mysql-bin.*
if errorlevel 1 (
    echo 壓縮失敗!
    exit /b 1
)

REM 4. 清理臨時文件
rmdir /s /q %BAK_PATH%\data

echo %date% %time% Incremental backup completed >> %BAK_PATH%\backup.log
echo ###################################################################

四、關鍵技術點解析

技術點說明注意事項
--single-transactionInnoDB 一致性快照,無鎖導出僅適用 InnoDB,MyISAM 需鎖表
--master-data=2註釋記錄 Binlog 位置便於從庫搭建、時間點恢復
--flush-logs切換 Binlog 文件全量備份後、增量備份前必須執行
--delete-master-logs備份後刪除舊 Binlog慎用!需確認從庫已同步,建議手動清理
flush-logs (增量)標記增量邊界配合 xcopy 複製新 Binlog
Binlog 格式必須 ROW 格式binlog_format=ROW,Statement 不安全

五、計劃任務配置

  1. 打開「任務計劃程序」taskschd.msc
  2. 創建基本任務 → 名稱 MySQL_Full_Backup
  3. 觸發器:每天 02:00 (業務低峰)
  4. 操作:啟動程序 cmd.exe,參數 /c E:\scripts\full_backup.bat
  5. 同理創建 MySQL_Incr_Backup,每 1 小時 執行一次
  6. 設置「無論用戶是否登錄都要運行」、最高權限

六、遠程傳輸擴展 (FTP/網絡共享)


REM 腳本末尾添加 - 上傳到 FTP 服務器
ftp -s:ftp_upload.txt

REM ftp_upload.txt 內容
open ftp.backup.server
user backup_user
password
binary
cd /mysql_backup/full
put %BAK_PATH%\full\db_%date:~0,4%%date:~5,2%%date:~6,2%.rar
bye

七、恢復演練 SOP (月度必做)

  1. 準備測試環境 (獨立服務器/容器)
  2. 解壓最新全量備份:rar x db_20240115.rar
  3. 導入:mysql -uroot -p db < db_20240115.sql
  4. 應用增量 Binlog (如需時間點恢復):mysqlbinlog mysql-bin.0000xx | mysql -uroot -p db
  5. 驗證數據完整性:行數、Checksum、業務抽樣
  6. 記錄耗時、問題、改進措施

八、Windows 2008/2012/2016 路徑空格處理


REM 路徑含空格必須雙引號包裹
set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
set RAR_PATH="C:\Program Files\WinRAR\rar.exe"

REM 日期格式化 (地域相關,建議 WMIC)
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set datetime=%%I
set YYYYMMDD=%datetime:~0,8%

Windows 批處理備份方案雖不如 Linux Shell 靈活,但通過標準化腳本、計劃任務、定期演練,同樣能構建可靠的備份體系。核心原則:自動化、壓縮傳輸、異地存儲、定期驗證。

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