运行环境

执行脚本环境:windows 10
数据库版本:MySQL8
备份工具:mysql自带的mysqldump工具

脚本内容

@echo off
:: =============================================
:: MySQL 8 自动备份脚本 (backup_mysql.bat)
:: 版本: 1.2
:: 最后更新: 2023-11-15
:: =============================================

:: 添加编码设置
chcp 65001 > nul
setlocal enableextensions enabledelayedexpansion

:: ---------- 配置部分 (请根据实际情况修改) ----------
set DB_HOST=42.192.204.228
set DB_PORT=3306
set DB_USER=root
set DB_PASS=123456
set DB_NAME=wordpress
set BACKUP_DIR=C:\MySQL_Backups
set MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"
set DAYS_TO_KEEP=30   :: 保留最近多少天的备份
set USE_ZIP=1         :: 1=启用压缩, 0=不压缩
set ZIP_PATH="C:\Program Files\WinRAR\WinRAR.exe"



:: ---------- 初始化部分 ----------
:: 获取当前日期时间 (格式: YYYYMMDD_HHMMSS)
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set DATE=%%c%%a%%b)
for /f "tokens=1-3 delims=:." %%a in ('time /t') do (set TIME=%%a%%b%%c)
set DATETIME=%DATE%_%TIME%

:: 创建备份文件名
set BACKUP_FILE=%DB_NAME%_%DATETIME%.sql
set BACKUP_FILE_ZIP=%DB_NAME%_%DATETIME%.zip

:: 创建日志文件名
::set LOG_FILE=%BACKUP_DIR%\backup_log.txt
set LOG_FILE=%BACKUP_DIR%\backup_log_%DATE%.txt

:: 修改所有日志记录为这种格式
(
    echo ========================================
    echo [%DATE% %TIME%] 备份作业开始
    echo 数据库: %DB_NAME%
    echo 备份目录: %BACKUP_DIR%
    echo ========================================
) >> "%LOG_FILE%"

:: ---------- 主程序开始 ----------
echo. >> %LOG_FILE%
echo [%DATE% %TIME%] 开始MySQL备份作业 >> %LOG_FILE%

:: 检查备份目录是否存在
if not exist "%BACKUP_DIR%" (
    echo 创建备份目录: %BACKUP_DIR% >> %LOG_FILE%
    mkdir "%BACKUP_DIR%"
    if errorlevel 1 (
        echo [错误] 无法创建备份目录! >> %LOG_FILE%
        exit /b 1
    )
)

:: 检查mysqldump是否存在
if not exist %MYSQL_BIN% (
    echo [错误] 找不到mysqldump.exe! 请检查路径: %MYSQL_BIN% >> %LOG_FILE%
    exit /b 1
)

:: 执行备份
echo 正在备份数据库 %DB_NAME%... >> %LOG_FILE%
%MYSQL_BIN% -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PASS% --default-character-set=utf8mb4 --single-transaction --routines --triggers --events %DB_NAME% > "%BACKUP_DIR%\%BACKUP_FILE%"

if errorlevel 1 (
    echo [错误] 数据库备份失败! >> %LOG_FILE%
    exit /b 1
) else (
    echo 数据库备份成功创建: %BACKUP_FILE% >> %LOG_FILE%
)

:: 压缩备份文件
if "%USE_ZIP%"=="1" (
    if exist %ZIP_PATH% (
        echo 正在压缩备份文件... >> %LOG_FILE%
        %ZIP_PATH% a -tzip "%BACKUP_DIR%\%BACKUP_FILE_ZIP%" "%BACKUP_DIR%\%BACKUP_FILE%"
        
        if errorlevel 1 (
            echo [警告] 压缩备份文件失败! 保留未压缩文件 >> %LOG_FILE%
        ) else (
            echo 备份文件压缩成功: %BACKUP_FILE_ZIP% >> %LOG_FILE%
            del "%BACKUP_DIR%\%BACKUP_FILE%"
        )
    ) else (
        echo [警告] 找不到7-Zip! 跳过压缩步骤 >> %LOG_FILE%
    )
)

:: 清理旧备份
echo 正在清理超过%DAYS_TO_KEEP%天的旧备份... >> %LOG_FILE%
forfiles /p "%BACKUP_DIR%" /m *.zip /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @file >> %LOG_FILE% & del @path"
forfiles /p "%BACKUP_DIR%" /m *.sql /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @file >> %LOG_FILE% & del @path"

:: 完成
echo [%DATE% %TIME%] 备份作业完成 >> %LOG_FILE%
echo 备份已完成! 详细信息请查看日志: %LOG_FILE%
exit /b 0

使用方法

根据自身情况填写配置信息即可

:: ---------- 配置部分 (请根据实际情况修改) ----------
set DB_HOST=42.192.204.228
set DB_PORT=3306
set DB_USER=root
set DB_PASS=123456
set DB_NAME=wordpress
set BACKUP_DIR=C:\MySQL_Backups
set MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"
set DAYS_TO_KEEP=30   :: 保留最近多少天的备份
set USE_ZIP=1         :: 1=启用压缩, 0=不压缩
set ZIP_PATH="C:\Program Files\WinRAR\WinRAR.exe"

运行结果:

在这里插入图片描述

日志信息详情

需完善部分

  1. 日期未按照年月日进行展示。
    修改日期时间获取部分,使用更可靠的方法:
:: 更可靠的日期时间获取方法
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "DATETIME=%%a"
set "DATE=%DATETIME:~0,4%%DATETIME:~4,2%%DATETIME:~6,2%"
set "TIME=%DATETIME:~8,2%%DATETIME:~10,2%%DATETIME:~12,2%"
set "DATETIME=%DATE%_%TIME%"
  1. 脚本文件压缩操作未执行。
%ZIP_PATH% a -afzip -ep1 -ibck -inul -r -y "%BACKUP_DIR%\%BACKUP_FILE_ZIP%" "%BACKUP_DIR%\%BACKUP_FILE%"
  1. 清除超过30天的备份文件环节未生效。

forfiles /d -30 只会删除 修改时间早于30天前 的文件。
通过Powershell修改文件的属性:修改时间
我的文件路径为:C:\MYSQL_Backups\wordpress_20250701_233212.zip
查看文件修改时间:(Get-Item “C:\MySQL_Backups\wordpress_20250701_233212.zip”).LastWriteTime
在这里插入图片描述
修改文件属性:修改时间
(Get-Item “C:\MySQL_Backups\wordpress_20250701_233212.zip”).LastWriteTime = “2025-05-01 23:32:35”
在这里插入图片描述
执行脚本后删除成功。
在这里插入图片描述

完善后的脚本

@echo off
:: =============================================
:: MySQL 8 自动备份脚本 (backup_mysql.bat)
:: 版本: 1.2
:: 最后更新: 2023-11-15
:: =============================================

:: 添加编码设置
chcp 65001 > nul
setlocal enableextensions enabledelayedexpansion

:: ---------- 配置部分 (请根据实际情况修改) ----------
set DB_HOST=42.192.204.228
set DB_PORT=3306
set DB_USER=root
set DB_PASS=123456
set DB_NAME=wordpress
set BACKUP_DIR=C:\MySQL_Backups
set MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"
:: 保留最近多少天的备份
set DAYS_TO_KEEP=30
:: 1=启用压缩, 0=不压缩 
set USE_ZIP=1
set ZIP_PATH="C:\Program Files\WinRAR\WinRAR.exe"



:: ---------- 初始化部分 ----------
:: 获取当前日期时间 (格式: YYYYMMDD_HHMMSS)
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "DATETIME=%%a"
set "DATE=%DATETIME:~0,4%%DATETIME:~4,2%%DATETIME:~6,2%"
set "TIME=%DATETIME:~8,2%%DATETIME:~10,2%%DATETIME:~12,2%"
set "DATETIME=%DATE%_%TIME%"

:: 创建备份文件名
set BACKUP_FILE=%DB_NAME%_%DATETIME%.sql
set BACKUP_FILE_ZIP=%DB_NAME%_%DATETIME%.zip

:: 创建日志文件名
::set LOG_FILE=%BACKUP_DIR%\backup_log.txt
set LOG_FILE=%BACKUP_DIR%\backup_log_%DATE%.txt

:: 修改所有日志记录为这种格式
(
    echo ========================================
    echo [%DATE% %TIME%] 备份作业开始
    echo 数据库: %DB_NAME%
    echo 备份目录: %BACKUP_DIR%
    echo ========================================
) >> "%LOG_FILE%"

:: ---------- 主程序开始 ----------
echo. >> %LOG_FILE%
echo [%DATE% %TIME%] 开始MySQL备份作业 >> %LOG_FILE%

:: 检查备份目录是否存在
if not exist "%BACKUP_DIR%" (
    echo 创建备份目录: %BACKUP_DIR% >> %LOG_FILE%
    mkdir "%BACKUP_DIR%"
    if errorlevel 1 (
        echo [错误] 无法创建备份目录! >> %LOG_FILE%
        exit /b 1
    )
)

:: 检查mysqldump是否存在
if not exist %MYSQL_BIN% (
    echo [错误] 找不到mysqldump.exe! 请检查路径: %MYSQL_BIN% >> %LOG_FILE%
    exit /b 1
)

:: 执行备份
echo 正在备份数据库 %DB_NAME%... >> %LOG_FILE%
%MYSQL_BIN% -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PASS% --default-character-set=utf8mb4 --single-transaction --routines --triggers --events %DB_NAME% > "%BACKUP_DIR%\%BACKUP_FILE%"

if errorlevel 1 (
    echo [错误] 数据库备份失败! >> %LOG_FILE%
    exit /b 1
) else (
    echo 数据库备份成功创建: %BACKUP_FILE% >> %LOG_FILE%
)

echo "%USE_ZIP%" >> %LOG_FILE%
:: 压缩备份文件
if "%USE_ZIP%"=="1" (
    if exist %ZIP_PATH% (
        echo 正在压缩备份文件... >> %LOG_FILE%
        %ZIP_PATH% a -afzip -ep1 -ibck -inul -r -y "%BACKUP_DIR%\%BACKUP_FILE_ZIP%" "%BACKUP_DIR%\%BACKUP_FILE%"
        
        if errorlevel 1 (
            echo [警告] 压缩备份文件失败! 保留未压缩文件 >> %LOG_FILE%
        ) else (
            echo 备份文件压缩成功: %BACKUP_FILE_ZIP% >> %LOG_FILE%
            del "%BACKUP_DIR%\%BACKUP_FILE%"
        )
    ) else (
        echo [警告] 找不到7-Zip! 跳过压缩步骤 >> %LOG_FILE%
    )
)
echo 当前设置的保留天数: %DAYS_TO_KEEP% >> "%LOG_FILE%"
:: 清理旧备份
echo 正在清理超过%DAYS_TO_KEEP%天的旧备份... >> "%LOG_FILE%"
forfiles /p "%BACKUP_DIR%" /m *.zip /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @file >> %LOG_FILE% & del @path"
forfiles /p "%BACKUP_DIR%" /m *.sql /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @file >> %LOG_FILE% & del @path"

:: 完成
echo [%DATE% %TIME%] 备份作业完成 >> "%LOG_FILE%"
echo 备份已完成! 详细信息请查看日志: "%LOG_FILE%"
exit /b 0
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐