Windows MySql 定时备份脚本

68 阅读1分钟

bat脚本

@echo off
::设置编码格式utf-8否则有中文乱码
chcp 65001
echo.
echo MySQL数据库开始备份

echo *****************************
echo.
echo 备份时间:%date% %time%
echo.
echo *****************************

set "back_path=D:\mysql_backup\genius_children" 
:: 周五 2024/05/17
set "Ymd=%date:~3,4%%date:~8,2%%date:~11,2%"
:: 2024/05/17 周五
:: set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%"
:: 文件计数器
set FILE_COUNT=0
set FILE_COUNT_ALL=0

IF NOT EXIST %back_path% (
    md "%back_path%"
) 

mysqldump --defaults-extra-file=D:\mysql_backup\genius_children.password genius_children --skip-lock-tables > "%back_path%\%Ymd%_back.sql"

echo 删除超过5天的备份数据

:: 遍历文件夹,统计大于5120的数据
for /R "%back_path%" %%f in (*) do (
  	
	set /a "FILE_COUNT_ALL+=1"
	
	:: 大于5120
	If %%~zf gtr 5120 (
		set /a "FILE_COUNT+=1"
	) else (
		echo 文件大小: %%~zf %%f"
	)
)

echo 当前文件数量:%FILE_COUNT_ALL% , 大于5120文件数量:%FILE_COUNT%

:: 备份失败会生成0KB的文件,数量统计忽略小于5120的文件,if判断防止备份数量过少却被删除的情况
if  %FILE_COUNT% gtr 7 (
	echo 当前文件数量大于7,执行删除程序
	
	:: 删除7天之前的数据
	forfiles /p "%back_path%" /m *back.sql -d -7 /c "cmd /c del /f @path"
) else (
	echo 当前文件数量小于7,不执行删除程序
)

echo MySQL数据库备份完成

:: 关闭窗口
@echo 数据库备份操作完成,30秒后关闭程序...
ping /n 30 127.1 >nul
exit

genius_children.password

[mysqldump]
user=root
password=123456

Windows 任务计划程序

1. 点击右侧创建任务

QQ截图20240519151640.png

2. 创建触发器

QQ截图20240519151847.png

3. 创建操作

选择要执行的脚本

QQ截图20240519151731.png

4. 运行

点击保存,输入密码后在列表中找到该任务右键执行运行。

QQ截图20240519151917.png

QQ截图20240503141856.png