MySQL8.0 数据库自动备份脚本


前言

本文适用于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=backup_user
@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 --user %mysql_user% --databases %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,进入任务计划程序,点击右侧创建基本任务,触发器根据实际情况调整,操作页面选择启动程序,选中刚编写的备份脚本,需要注意脚本名称尽量不要有中文。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MySQL 8.0 数据库备份和还原脚本,您可以根据自己的需求进行修改: 备份脚本: ``` #!/bin/bash # MySQL backup script # MySQL credentials user="username" password="password" host="localhost" db_name="database_name" # Other options backup_path="/path/to/backup/folder" date=$(date +"%d-%b-%Y") # Backup filename filename="$db_name-$date.sql" # Backup command mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$filename # Compression command gzip $backup_path/$filename ``` 还原脚本: ``` #!/bin/bash # MySQL restore script # MySQL credentials user="username" password="password" host="localhost" db_name="database_name" # Other options backup_path="/path/to/backup/folder" filename="$db_name-$date.sql.gz" # Decompression command gunzip $backup_path/$filename # Restore command mysql --user=$user --password=$password --host=$host $db_name < $backup_path/$db_name-$date.sql ``` 在备份脚本中,您需要将 `username`、`password`、`host` 和 `database_name` 替换为您的 MySQL 访问凭据和数据库名称。`backup_path` 变量指定备份文件应该存储在哪个文件夹中,`date` 变量用于生成备份文件名。 在还原脚本中,您需要使用与备份脚本相同的 `username`、`password`、`host` 和 `database_name` 值。`backup_path` 变量应该与备份脚本中的相同。`filename` 变量包含备份文件名,它必须与备份脚本中的相同。 请注意,这些脚本仅是示例,不适用于所有情况。在实际使用之前,请测试并根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值