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

Windows 下 MySQL 批次備份 BAT 腳本實戰:日期命名、壓縮、避坑指南

     編輯:MySQL 綜合教學

Windows 下 MySQL 批次備份 BAT 腳本實戰:日期命名、壓縮、避坑指南

Windows 環境使用 BAT 腳本配合任務排程器實現 MySQL 定時備份。本文提供經過實測的健壯腳本,解決日期變數解析、檔名空格、密碼特殊字元等常見坑。

前置:找回 root 密碼 (若遺失)

REM 1. 停止服務
net stop mysql

REM 2. 跳過授權表啟動 (新視窗保持開啟)
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini" --console --skip-grant-tables

REM 3. 新視窗無密登入修改密碼
mysql -u root -p
REM 直接 Enter
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
QUIT

REM 4. 關閉跳過授權視窗,正常啟動
net start mysql

健壯備份腳本 (backup_mysql.bat)

@echo off
setlocal ENABLEDELAYEDEXPANSION

REM ===== 使用者配置區 =====
set BACKUP_ROOT=D:\Backup\MySQL
set DATABASES=hoomsun_credit
set DB_USER=root
set DB_PASS=root
set MYSQL_BIN=D:\mysql-5.6.21-winx64\bin
set WINRAR_PATH="C:\Program Files\WinRAR\WinRAR.exe"
REM =========================

REM --- 產生無空格時間戳檔名 (核心避坑) ---
set HH=%time:~0,2%
set HH=%HH: =0%                    REM 修正上午單位數小時前導空格
set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%%HH%%time:~3,2%%time:~6,2%
set BACKUP_FILE=%DATABASES%_%TIMESTAMP%.sql

REM --- 建立日期分層目錄 ---
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
set BACKUP_DIR=%BACKUP_ROOT%\%YEAR%\%MONTH%\%DAY%

if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
cd /d "%BACKUP_DIR%"

echo 開始備份 %DATABASES% ...
echo 輸出檔案: %BACKUP_FILE%

REM --- 執行備份 ---
"%MYSQL_BIN%\mysqldump.exe" -u%DB_USER% -p%DB_PASS% %DATABASES% > "%BACKUP_FILE%" 2>nul
if errorlevel 1 (
    echo [ERROR] mysqldump 失敗,錯誤碼 %errorlevel%
    goto END
)

REM --- 可選壓縮 (需安裝 WinRAR) ---
if exist %WINRAR_PATH% (
    echo 壓縮中...
    %WINRAR_PATH% a -k -r -s -m1 -ep1 "%BACKUP_FILE:.sql=.rar%" "%BACKUP_FILE%" 2>nul
    if not errorlevel 1 (
        del /f /q "%BACKUP_FILE%"
        echo 已壓縮並刪除原始 SQL
    )
)

echo 備份完成: %BACKUP_DIR%\%BACKUP_FILE:.sql=.rar%

:END
endlocal

核心避坑解析

坑點現象根因修正
日期變數前導空格檔名含空格 `20240101 93045.sql``%time:~0,2%` 上午 9 點為 `" 9"``set HH=%HH: =0%` 替換空格為 0
編碼格式不一致複製網路腳本執行亂碼/語法錯BAT 需 ANSI 編碼 (中文系統)記事本另存為 ANSI / Notepad++ 轉碼
密碼特殊字元含 `&` `|` `>` `<` `^` `%` 失敗BAT 特殊字元需轉義用 `^&` `^|` `^>` `^^` `%%` 或改用配置檔
mysqldump 警告`Warning: Using a password on the command line...`命令列明文密碼不安全生產環境用 `--defaults-extra-file` 指定加密配置檔
長路徑含空格執行失敗/截斷路徑未加雙引號所有路徑變數用 `"%VAR%"` 包裹

進階:使用配置檔避免明文密碼

REM my_backup.cnf (放在腳本同目錄,權限 600)
[client]
user=root
password="your&complex^pass"
host=127.0.0.1
port=3306

REM 腳本中調用
"%MYSQL_BIN%\mysqldump.exe" --defaults-extra-file=my_backup.cnf %DATABASES% > "%BACKUP_FILE%"

任務排程器設定

  1. 開啟「任務排程器」→ 建立基本任務
  2. 觸發器:每日 / 每週 / 自訂
  3. 動作:啟動程式 `C:\Scripts\backup_mysql.bat`
  4. 條件:僅網路可用時啟動
  5. 設定:若任務已在執行,勿啟動新實例
  6. 「使用最高權限執行」 (必要)

驗證備份完整性

REM 還原測試腳本 (restore_test.bat)
mysql -u root -p test_db < D:\Backup\MySQL\2024\01\15\hoomsun_credit_20240115093045.sql
REM 或解壓後
WinRAR.exe x backup.rar
mysql -u root -p test_db < backup.sql
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved