Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)
1. 保存备份脚本
将脚本保存为mysql_backup.bat
文件。
@echo off
setlocal enabledelayedexpansion
:: ================================================
:: 自动请求管理员权限
:: ================================================
:: 检查是否已管理员身份运行
net session >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
echo 正在请求管理员权限...
powershell -Command "Start-Process '%~s0' -Verb RunAs"
exit /b
)
:: ================================================
:: 数据库备份脚本
:: 功能:自动备份MySQL数据库,保留7天历史备份
:: 特点:WinRAR压缩、并行执行、错误日志、权限控制
:: 配置日期:2025-07-22
:: ================================================
:: ------------------------------
:: 配置区域(根据实际环境修改)
:: 初始化变量
:: ------------------------------
set "MYSQL_BIN=C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump"
set "DATABASE_USER=root"
set "DATABASE_PASSWORD=123456"
set "BACKUP_ROOT=%~dp0"
set "DATABASES=app,client"
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
:: 日志目录
set "LOG_DIR=%BACKUP_ROOT%logs"
:: 备份日志文件
set "LOGFILE=%BACKUP_ROOT%logs/backup_%Ymd%.log"
set ERROR_FLAG=0
:: 创建日志目录
if not exist "%LOG_DIR%" (
mkdir "%LOG_DIR%"
)
echo ====================================================================================================================== >> %LOGFILE%
echo [%date% %time%] === 备份开始 === >> %LOGFILE%
:: ------------------------------
:: 目录检查与创建
:: ------------------------------
for /l %%i in (1,1,7) do (
if not exist %BACKUP_ROOT%D%%i (
mkdir %BACKUP_ROOT%D%%i
echo [%date% %time%] 提示:创建目录: D%%i >> %LOGFILE%
)
)
:: ------------------------------
:: 清理旧备份(保留7天)
:: ------------------------------
if exist %BACKUP_ROOT%D1/*.sql (
del /Q "%BACKUP_ROOT%\D1\*.sql" >> "%LOGFILE%" 2>&1
if !ERRORLEVEL! NEQ 0 (
echo [%date% %time%] 错误: 删除D1旧备份失败 >> %LOGFILE%
set ERROR_FLAG=1
)
)else (
echo [%date% %time%] 警告: D1无SQL文件可删除 >> %LOGFILE%
)
:: ------------------------------
:: 目录轮转
:: ------------------------------
for /l %%i in (2,1,7) do (
set /a j=%%i-1
if exist "%BACKUP_ROOT%D%%i\*.sql" (
move /Y "%BACKUP_ROOT%D%%i\*.sql" "%BACKUP_ROOT%D!j!\" >> %LOGFILE% 2>&1
if !ERRORLEVEL! NEQ 0 (
echo [%date% %time%] 错误: 移动D%%i到D!j!失败(错误码: !ERRORLEVEL!) >> %LOGFILE%
set ERROR_FLAG=1
)
)else (
echo [%date% %time%] 警告: D%%i无SQL文件可移动 >> %LOGFILE%
)
)
:: ------------------------------
:: 顺序备份数据库
:: ------------------------------
for %%d in (%DATABASES%) do (
echo [%date% %time%] 开始备份数据库: %%d >> %LOGFILE%
:: 执行备份
"%MYSQL_BIN%" -u%DATABASE_USER% -p%DATABASE_PASSWORD% %%d > "%BACKUP_ROOT%D7\%%d_%Ymd%.sql"
:: 错误检查
if !ERRORLEVEL! NEQ 0 (
echo [%date% %time%] 严重错误: 数据库 %%d 备份失败 >> %LOGFILE%
set ERROR_FLAG=1
) else (
echo [%date% %time%] 数据库成功备份: %%d >> %LOGFILE%
)
)
:: ------------------------------
:: 最终状态检查
:: ------------------------------
if %ERROR_FLAG% NEQ 0 (
echo [%date% %time%] === 备份完成(有错误)=== >> %LOGFILE%
exit /b 1
) else (
echo [%date% %time%] === 备份完成(成功)=== >> %LOGFILE%
exit /b 0
)
endlocal
2. 创建定时任务
2.1 打开任务计划程序
- 按
Win+R
,输入taskschd.msc
回车。 - 或通过控制面板 > 管理工具 > 任务计划程序。
2.2 创建基本任务
- 右侧点击
创建任务
。 - 名称输入
MySQL定时备份
。 - 描述可填写
MSQL定时备份:每日凌晨两点备份app、plat数据库库,保留最近7天的数据库数据
。 - 高级配置(可选):勾选
不管用户是否登录都要运行
。 - 高级配置(可选):勾选
使用最高权限运行
。
2.3 设置触发器
- 选择
每天
。 - 开始时间设置为
02:00:00
。 - 重复间隔保持
1天
。
2.4 设置操作
- 选择
启动程序
。 - 程序或脚本浏览选择
mysql_backup.bat
。 - 起始位置填写脚本所在目录(如
C:\scripts\
)。
2.5 完成设置
- 点击
完成
创建任务。
2.6 验证任务(可选)
- 右键新建的任务选择
运行
测试。 - 检查日志文件确认备份是否成功。