@echo off
|
setlocal enabledelayedexpansion
|
|
:: 获取当前日期时间作为时间戳(年月日_时分秒)
|
for /f %%i in ('wmic os get localdatetime ^| find "."') do set DT=%%i
|
set DATE=%DT:~0,8%
|
set TIME=%DT:~8,6%
|
set DATETIME=%DATE%_%TIME%
|
|
:: 设置变量
|
set BACKUP_DIR=C:\Program Files\MySQL\database_backups
|
set MYSQL_BIN=C:\Program Files\MySQL\MySQL Server 8.0\bin
|
set MYSQL_USER=root
|
set MYSQL_PASSWORD=Root_ltkj123
|
set SEVENZIP="C:\Program Files\7-Zip\7z.exe"
|
|
:: 创建备份目录
|
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
|
|
:: 遍历数据库(排除包含 test 的)
|
for /F "skip=1 delims=" %%D in ('""%MYSQL_BIN%\mysql.exe" -u%MYSQL_USER% -p%MYSQL_PASSWORD% -e "SHOW DATABASES LIKE 'ltkjpeis%%';" -s -N"') do (
|
echo %%D | find /I "test" >nul
|
if errorlevel 1 (
|
set DB_NAME=%%D
|
echo Backing up !DB_NAME!...
|
|
:: 生成 SQL 文件
|
"%MYSQL_BIN%\mysqldump.exe" -u%MYSQL_USER% -p%MYSQL_PASSWORD% --routines --triggers --events !DB_NAME! > "%BACKUP_DIR%\!DB_NAME!_%DATETIME%.sql"
|
|
:: 使用 7-Zip 压缩 SQL 文件为 ZIP
|
%SEVENZIP% a -tzip "%BACKUP_DIR%\!DB_NAME!_%DATETIME%.zip" "%BACKUP_DIR%\!DB_NAME!_%DATETIME%.sql"
|
|
:: 删除原始 SQL 文件
|
del /F /Q "%BACKUP_DIR%\!DB_NAME!_%DATETIME%.sql"
|
) else (
|
echo Skipping database: %%D (contains "test")
|
)
|
)
|
|
:: 删除超过 3 天的 ZIP 文件
|
forfiles /p "%BACKUP_DIR%" /m *.zip /d -3 /c "cmd /c del /F /Q @path"
|
|
echo Backup complete. ZIP files saved in %BACKUP_DIR%.
|