zhaowenxuan
22 小时以前 6a4e3a5c4c34fdef0accc93d8a077ab016d15250
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@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
 
:: 创建备份目录
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"
 
        :: 压缩为 ZIP(需要 PowerShell 5.0+)
        powershell -NoProfile -ExecutionPolicy Bypass -Command ^
        "Compress-Archive -Path '%BACKUP_DIR%\!DB_NAME!_%DATETIME%.sql' -DestinationPath '%BACKUP_DIR%\!DB_NAME!_%DATETIME%.zip'"
 
        :: 删除原始 SQL 文件
        del /F /Q "%BACKUP_DIR%\!DB_NAME!_%DATETIME%.sql"
    ) else (
        echo Skipping database: %%D (contains "test")
    )
)
 
:: 删除超过 3 天的 ZIP 文件
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"Get-ChildItem -Path \"%BACKUP_DIR%\" -Filter *.zip ^| Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-3) } ^| Remove-Item -Force"
 
echo Backup complete. ZIP files saved in %BACKUP_DIR%.