Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)

Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)

1. 保存备份脚本

将脚本保存为mysql_backup.bat文件。

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 验证任务(可选)

  • 右键新建的任务选择运行测试。
  • 检查日志文件确认备份是否成功。
相关推荐
NineData1 小时前
NineData新增SQL Server到MySQL复制链路,高效助力异构数据库迁移
数据库·人工智能·mysql
YY&DS1 小时前
Windows Cmake Vs2017/2010 编译安装Protobuf
windows
Neng_Miao3 小时前
MySql主从部署
mysql·adb
天朝八阿哥3 小时前
PC上多开微信的方法
linux·windows·微信
泉城老铁3 小时前
千万级数据MySQL的极致优化
大数据·数据库·mysql
田猿笔记4 小时前
PDF 表单字段属性详解
服务器·windows·python·pdf
fengye2071614 小时前
板凳-------Mysql cookbook学习 (十二--------5)
数据库·学习·mysql
过期动态6 小时前
MySQL中的多表查询和笛卡尔积问题
java·数据库·mysql·spring·tomcat·mybatis
知其然亦知其所以然6 小时前
Java社招高频题:binlog格式知多少,90%的人答不全!
后端·mysql·面试
6v6-博客8 小时前
Windows系统暂停更新工具
windows·win