前言
本文适用于MySQL8.0环境下的数据库自动备份功能。
一、编写备份数据库脚本
修改以下代码中的MySQL用户名、安装路径、数据库名后保存为backup_databases.bat。
@echo off
chcp 65001
@REM 当前目录
set BASE_DIR=%~dp0
@REM 设置mysql连接信息,采用无密码的用户跳过登陆进行备份
@REM 用户授予服务器PROCESS权限以及要对应数据库`SELECT`权限、`LOCK_TABLES`权限、`SHOW_VIEW`权限
@REM 用户名
set mysql_user=root
@REM 主机
set mysql_host=localhost
@REM 密码
set mysql_password=123456
@REM 端口
set mysql_port=3306
@REM 要备份的数据库
set mysql_db=test
@REM mysql安装路径,指定到bin目录下
set mysql_path=D:\MySQL\mysql-8.0.23-winx64\bin
@REM 备份文件的存储位置
set back_path=%BASE_DIR%backup
@REM 备份文件的最大保存数量,超过后自动清理最早的文件
set back_count=3
@REM 日志文件的存储位置
set log_path=%BASE_DIR%
if not exist %back_path% (
mkdir %back_path%
)
@REM 设置时间格式
set year=%date:~3,4%
set month=%date:~8,2%
set day=%date:~11,2%
set hour=%time:~0,2%
set minute=%time:~3,2%
set second=%time:~6,2%
set df=%year%%month%%day%_%hour%%minute%%second%
@REM 替换字符串中可能出现的空格为0
set dt=%df: =0%
@REM 检查已经存在的备份数量,上限为back_count,到达上限后清除最早的记录
@REM 遍历目录下的文件
set /a current_count=1
for /R %back_path% %%i in (*_auto_backup_*.sql) do (
set /a current_count+=1
)
echo.
echo 系统时间:%year%年%month%月%day%日 %time% >> %log_path%\备份日志.log
echo 启动备份脚本... >> %log_path%\备份日志.log
echo 备份数据库:%mysql_db% >> %log_path%\备份日志.log
echo 当前已有备份:%current_count% >> %log_path%\备份日志.log
@REM 判断是否达到设置的存储上限,删除创建时间最早的文件
setlocal ENABLEDELAYEDEXPANSION
if %current_count% gtr %back_count% (
pushd %back_path%
set /a should_del_count=%current_count%-%back_count%
echo 数量达到上限,应删除 !should_del_count! 个早期文件 >> %log_path%\备份日志.log
for /f "tokens=*" %%i in ('dir /b /t:c /o:d') do (
del /f %%i
set /a should_del_count-=1
echo 删除最早备份的文件 %%i! >> %log_path%\备份日志.log
if !should_del_count! == 0 (
popd
goto :backup
)
)
)
endlocal
:backup
set backup_file=%back_path%\%mysql_db%_auto_backup_%dt%.sql
@REM 执行备份命令
%mysql_path%/mysqldump --host=%mysql_host% --port=%mysql_port% --user=%mysql_user% --password=%mysql_password% -B %mysql_db% > %backup_file%
if %ERRORLEVEL% == 0 (
echo %date%-%time% 备份完成! 文件名称 %backup_file% >> %log_path%\备份日志.log
) else (
@REM 备份失败,删除空的文件,避免覆盖
del /f %backup_file%
echo 备份异常,请检查配置 >> %log_path%\备份日志.log
)
exit
二、新建MySQL用户
新建用于备份的MySQL用户backup_user
,授予服务器PROCESS权限以及要备份的数据库SELECT权限、LOCK_TABLES权限,这样就可以绕过密码登录备份数据库,这一步可以在Navicat Premium界面操作。
三、创建Windows定时任务
win + r
并输入taskschd.msc
,进入任务计划程序,点击右侧创建基本任务,触发器根据实际情况调整,操作
页面选择启动程序
,选中刚编写的备份脚本,需要注意脚本名称尽量不要有中文。