数据库增量备份和全量备份

数据库增量备份和全量备份

1.修改配置

首先打开配置文件my.ini

添加以下配置

shell 复制代码
#log-bin="JSSM-20230617FY-bin"
log-bin="mysql-bin"

# Server Id.
server-id=1

#指令指定写入二进制日志的事件格式
binlog_format=MIXED

添加完之后对MySQL服务进行重启

重启之后可以发现在MySQL文件的Data目录下多了以下二进制文件

2.撰写增量备份和全量备份的脚本

2.1 全量备份
shell 复制代码
创建fullBackup.bat



@echo off
:: 设置备份相关的配置
::改为自己的账号
set MYSQL_USER=roXX    
::改为自己的密码
set MYSQL_PASSWORD=123XX
set MYSQL_HOST=localhost
set MYSQL_PORT=3306
::改成自己的数据库名字
set DATABASE_NAME=trigger
:: ::改成自己要存储全量备份存储路径      
set BACKUP_DIR=D:\zengliangandquanliang\full
:: 修改直接的MySQL bin 目录路径
set MYSQL_BIN=C:\ProgramData\MySQL\MySQL Server 8.0\Data

:: 获取当前日期时间,格式为YYYY-MM-DD_HH-MM-SS
for /f "tokens=2 delims==" %%I in ('"wmic os get LocalDateTime /value | findstr ="') do set datetime=%%I
set date=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%
set time=%datetime:~8,2%-%datetime:~10,2%-%datetime:~12,2%
set timestamp=%date%_%time%

:: 创建备份目录
mkdir "%BACKUP_DIR%" 2>nul

:: 设置备份文件路径
set BACKUP_FILE=%BACKUP_DIR%\MySQL_FullBackup_%timestamp%.sql

:: 执行全量备份
echo 开始全量备份...


::跳转自己mysql安装位置
pushd C:\Program Files\MySQL\MySQL Server 8.0\bin
mysqldump -u %MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% -P%MYSQL_PORT% %DATABASE_NAME% --routines --events --single-transaction > "%BACKUP_FILE%"


REM 删除超过30天的备份文件(可选)
forfiles /p "%BACKUP_DIR%" /m *.sql /d -30 /c "cmd /c del @path"

[mysqldump]

user=user_name
password=password

按照以下要求进行修改

修改完之后双击运行,下图所示为全量备份的SQL文件

2.2 增量备份
shell 复制代码
创建incremental_backup.bat


@echo off
:: 设置备份相关的配置
set MYSQL_USER=roXXt             
set MYSQL_PASSWORD=123XXX
set MYSQL_HOST=localhost
set MYSQL_PORT=3306
set DATABASE_NAME=trigger
:: 增量备份存储路径      
set BACKUP_DIR=D:\zengliangandquanliang\incremental
:: MySQL bin 目录路径
set MYSQL_BIN=C:\ProgramData\MySQL\MySQL Server 8.0\Data

:: 获取当前日期时间,格式为YYYY-MM-DD HH:MM:SS
for /f "tokens=2 delims==" %%I in ('"wmic os get LocalDateTime /value | findstr ="') do set datetime=%%I
set current_date=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%
set current_time=%datetime:~8,2%-%datetime:~10,2%-%datetime:~12,2%
set timestamp=%current_date% %current_time%


pushd C:\Program Files\MySQL\MySQL Server 8.0\bin
for /f "tokens=1,2" %%a in ('mysql -u%MYSQL_USER% -p%MYSQL_PASSWORD% -e "SHOW MASTER STATUS;" -N') do (
    set binlog_file=%%a
)

for /f "delims=" %%A in ('powershell -NoProfile -Command "(Get-Date).AddMinutes(-10).ToString('yyyy-MM-dd HH:mm:ss')"') do set past_time=%%A
echo 当前时间减去10分钟:%past_time%

:: 输出备份时间范围
:: echo 上次备份时间:%LAST_BACKUP_TIME%
echo 十分钟前时间:%past_time%
echo 当前时间:%timestamp%



:: 设置备份文件路径
REM set BACKUP_FILE=%BACKUP_DIR%\MySQL_IncrementalBackup_%current_date%_%current_time%.binlog
set BACKUP_FILE=%BACKUP_DIR%\MySQL_IncrementalBackup_%current_date%_%current_time%.sql

echo %BACKUP_FILE%
:: 执行基于时间的增量备份

echo 开始增量备份,从时间:%past_time% 到时间:%timestamp% ...

pushd C:\Program Files\MySQL\MySQL Server 8.0\bin
mysqlbinlog -u%MYSQL_USER% -p%MYSQL_PASSWORD% "C:\ProgramData\MySQL\MySQL Server 8.0\Data\%binlog_file%" --start-datetime="%past_time%" --stop-datetime="%timestamp%" > %BACKUP_FILE%

REM 删除超过30天的备份文件(可选)
forfiles /p "%BACKUP_DIR%" /m *.sql /d -30 /c "cmd /c del @path"

[mysqldump]

user=user_name
password=password

3. 增量备份恢复

!

举例:我们在trrgger库中的people表新增一条记录名叫:X123X

执行增量备份的bat文件

相关推荐
智购科技智能售货柜16 分钟前
自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH
运维·服务器·数据库·人工智能·redis·物联网·yolo
ACP广源盛1392462567323 分钟前
2026 PCIe互连芯片@ACP#国产替代格局解析:芯动科技领跑高端交换芯片赛道
大数据·网络·数据库·人工智能·分布式·嵌入式硬件
代码代码快快显灵32 分钟前
MYSQL-DAY2
数据库·mysql
隔窗听雨眠1 小时前
Oracle到PostgreSQL迁移实战:pg_hint_plan执行计划控制完全指南
数据库·postgresql·oracle
IKUN家族1 小时前
常见的依懒
java·服务器·数据库
我命由我123451 小时前
Jetpack Compose - Material Design 断点范围、WindowSizeClass、针对不同屏幕尺寸创建预览、四类导航栏
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
DBA_G1 小时前
解析GBase 8s数据库锁机制
数据库·oracle
captain3762 小时前
多线程进阶
java·开发语言·数据库
initialize13062 小时前
Oracle数据库 binary XML data类型同步
xml·数据库
倔强的石头1062 小时前
连接池参数治理-HikariCP怎么配才稳
数据库·oracle