在 Unix 系統環境中可以通過各種 Unix shell 結合 cron 任務實現對 MySQL 的自動備份,那在 Windows 下要如何實現呢,其實很簡單隻要寫好自定義的 batch 指令碼在結合 taskschd.msc(任務計劃程式),就可以實現,最近需要修改調優 Windows 環境下的 MySQL 就順便寫了一個使用 mysqldump 做邏輯備份的 batch 指令碼,如下:
@echo off
::mysql_backup.bat
set hour=%time:~0,2%
if “%time:~0,1%”==” ” set hour=0%time:~1,1%
set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2%
::WordPress 主機 ip
set host=127.0.0.1
:: 埠
set port=3306
:: 使用者
set username=root
:: 密碼
set password=youpassword
:: 要備份資料庫的名字,如果有多個庫請用空格分隔
set databasename=database1 database2
:: MySQL Bin 目錄
:: 如果在安裝配置時新增 MySQL Bin 目錄到了環境變數 (PATH) ,此處可以留空
set MYSQL=D:mysql-5.5.57-winx64bin
:: 配置 SQL 備份路徑
set DIR=D:backupdb
:: 建立備份 MySQL 的備份目錄
if not exist %DIR% (
    mkdir %DIR% 2>nul
)

if not exist %DIR% (
    echo Backup path: %DIR% not exists, create dir failed.
    goto exit
)

echo start mysqldump …

for %%i in (%databasename%) do (
    %MYSQL%mysqldump -h%host% -P%port% -u%username% -p%password% %%i > %DIR%%%i-%now%.sql 2>nul
)

echo end mysqldump
:: 記錄主庫狀態,且做日誌記錄
%MYSQL%mysql -h%host% -P%port% -u%username% -p%password% -Bse “select now();show master statusG” > %DIR%MySQL_status-%now%.log
echo delete files before 60 days
:: 刪除 60 天前的備份
forfiles /p “D:backupdb” /m *.* /d -60 /c “cmd /c del @file /f”

:exit
在寫好 batch 指令碼後最後再在 taskschd.msc 中新增每天定時觸發執行,具體的配置方法如下:

這裏需要注意的是,這裏一定要勾選上使用最高許可權執行,以免造成執行失敗

這裏觸發條件選擇每天一次,具體時間可以視實際生產環境判斷,開始任務則為按預定計劃

在這裏填上 batch 指令碼的路徑以及初始目錄,其中需要注意的是一定需要配置初始目錄,不然沒有把 batch 指令碼新增入 PATH 環境變數中該任務會找不到 batch 指令碼從而執行失敗

條件這裏可以根據實際情況選擇

這裏一定需要勾選 允許按需執行任務,其他的時間就實際情況而定,最後在確認儲存後輸入使用者密碼這樣每天系統就會自動做 mysqldump 邏輯備份。