適用於 MySQL + Tomcat (Java Web) 架構的全自動備份腳本,單一 .bat 完成:資料庫匯出、停止 Tomcat、打包專案目錄、啟動 Tomcat、本地/遠端 7 天滾動刪除舊備份。可直接丟入 Windows 工作排程器執行。
@echo off
rem ===== 參數 =====
set BAK_ROOT=E:\bak
set MYSQL_BIN=C:\Program Files\MySQL\MySQL Server 5.0\bin
set TOMCAT_HOME=D:\tomcat5
set KEEP_DAYS=7
rem ===== 1. 備份資料庫 =====
echo [%date% %time%] 開始備份資料庫 >> %BAK_ROOT%\backup.log
del %BAK_ROOT%\xx%date:~0,4%%date:~5,2%%date:~8,2%.sql 2>nul
%MYSQL_BIN%\mysqldump -uroot -proot -c --extended-insert --default-character-set=GB2312 -B xx ^> %BAK_ROOT%\xx%date:~0,4%%date:~5,2%%date:~8,2%.sql
echo [%date% %time%] 資料庫備份完成 >> %BAK_ROOT%\backup.log
rem ===== 2. 備份專案 (需停止 Tomcat) =====
echo [%date% %time%] 開始備份專案 >> %BAK_ROOT%\backup.log
net stop tomcat >> %BAK_ROOT%\backup.log
del %BAK_ROOT%\xx_program%date:~0,4%%date:~5,2%%date:~8,2%.rar 2>nul
"C:\Program Files\WinRAR\WinRAR.exe" a -r %BAK_ROOT%\dxoa_program%date:~0,4%%date:~5,2%%date:~8,2%.rar %TOMCAT_HOME%\webapps\xx\ >> %BAK_ROOT%\backup.log
copy jchatbox.ser %TOMCAT_HOME%\webapps\jchat\WEB-INF\conf\jchatbox.ser /y >> %BAK_ROOT%\backup.log
net start tomcat >> %BAK_ROOT%\backup.log
echo [%date% %time%] 專案備份完成 >> %BAK_ROOT%\backup.log
rem ===== 3. 計算 7 天前日期 (VBS 輔助) =====
echo wscript.echo dateadd("d",-%KEEP_DAYS%,date) > %tmp%\tmp.vbs
for /f "tokens=1-3 delims=/- " %%i in ('cscript //nologo %tmp%\tmp.vbs') do (
set Y=%%i & set M=%%j & set D=%%k
)
if %M% LSS 10 set M=0%M%
if %D% LSS 10 set D=0%D%
set OLD_DATE=%Y%%M%%D%
rem ===== 4. 刪除本地 7 天前備份 =====
del %BAK_ROOT%\xx%OLD_DATE%.sql >> %BAK_ROOT%\backup.log
del %BAK_ROOT%\xx_program%OLD_DATE%.rar >> %BAK_ROOT%\backup.log
%date:~0,4% 取年、%date:~5,2% 取月、%date:~8,2% 取日,需確認系統日期格式為 YYYY-MM-DD(可用 echo %date% 驗證)。dateadd("d",-7,date) 取得 7 天前日期,解決批次檔無原生日運算功能的限制。-c 完整 INSERT、--extended-insert 多行合併、--default-character-set=GB2312 避免中文亂碼。net stop/start tomcat 需服務名稱確為 tomcat(可用 sc query 確認)。E:\backup\backup.bat。backup.log 確認無誤後即可投入生產。