利用 Windows 批處理腳本調用 mysqldump,配合「任務計劃程序」實現每日定時自動備份;還原時直接通過 mysql 客戶端導入 SQL 文件。無需第三方工具,輕量可控。
@echo off
REM 設置時間戳格式:YYYYMMDDHHMMSS
set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%
REM 替換為實際值
set DB_USER=root
set DB_PASS=your_password
set DB_NAME=your_database
set BACKUP_DIR=D:\mysql_backup
REM 執行備份
mysqldump -u %DB_USER% -p%DB_PASS% %DB_NAME% > "%BACKUP_DIR%\%DB_NAME%_%timestamp%_bak.sql"
REM 可選:壓縮備份文件(需安裝 7-Zip)
REM "C:\Program Files\7-Zip\7z.exe" a -tzip "%BACKUP_DIR%\%DB_NAME%_%timestamp%_bak.zip" "%BACKUP_DIR%\%DB_NAME%_%timestamp%_bak.sql"
REM del "%BACKUP_DIR%\%DB_NAME%_%timestamp%_bak.sql"
echo [%date% %time%] Backup completed: %DB_NAME%_%timestamp%_bak.sql
%date% 格式取決於系統區域設置(上述代碼假設 YYYY-MM-DD),建議用 wmic os get localdatetime 獲取標準格式更穩健。--defaults-extra-file 指向受保護的配置文件BACKUP_DIR 有寫入權限。cmd.exe → 參數 /c D:\scripts\backup_mysql.batmysql -u root -p your_database < D:\mysql_backup\your_database_20240115020000_bak.sql
輸入密碼後等待完成,無輸出即成功。
SET autocommit=0; 結尾加 COMMIT;(mysqldump 默認已包含)SET sql_log_bin=0;(需 SUPER 權限),避免產生大量 Binlog| 需求 | 實現方案 |
|---|---|
| 多庫備份 | 腳本中循環數組 for %%d in (db1 db2 db3) do mysqldump ... |
| 異地備份 | 備份完成後調用 rclone / scp / ftp 上傳至對象存儲/異地服務器 |
| 保留策略 | 腳本末尾加入 forfiles /p "%BACKUP_DIR%" /m *_bak.sql /d -7 /c "cmd /c del @path" 刪除 7 天前文件 |
| 備份驗證 | 定期腳本自動還原至測試庫,校驗核心表行數/校驗和 |
CREATE DATABASE 或在 mysqldump 時加 --databases 參數「批處理 + 計劃任務」是 Windows 環境下成本最低、可控性最強的 MySQL 自動備份方案。核心在於:腳本參數化、密碼安全化、備份驗證常態化、保留策略自動化。建議每季度演練一次全量還原,確保備份真正可用。