插件窝 干货文章 Windows环境MySQL全量备份+增量备份的实现

Windows环境MySQL全量备份+增量备份的实现

class 数据库 备份 uploads 899    来源:    2024-10-28

环境准备

1.1.安装MySQL

在进行MySQL数据库备份和还原操作时,必须先提前安装好MySQL环境,且MySQL服务已成功开启

如果没有安装MySQL环境,可以参考博客:https://www.jb51.net/database/3069340t1.htm

如果已成功安装MySQL环境,打开运行窗口,输入:services.msc打开Windows服务窗口,查看MySQL是否处于开启状态

如果服务开启失败可以将MySQL安装目录下的data目录删除,然后进行重新安装,安装步骤可以参考上面的博客

1.2.添加log-bin日志配置

找到自己MySQL安装目录下的my.ini配置文件

打开my.ini配置文件,并在my.ini文件中的[mysqld]下面添加一行

log-bin=mysql-bin
server-id=1
binlog_format=MIXED

添加完成之后重启MySQL服务,会在MySQL安装目录的data目录下生成一个mysql-bin.000001日志文件

【注】

mysql-bin.00000X日志文件用于后面进行数据库增量还原操作

1.3.查看是否已经开启二进制日志,执行如下命令查看log-bin是否开启,若状态为ON,则表示已正常开启

show variables like 'log_bin';

二、创建测试数据库和表

2.1.创建测试数据库

使用Navicat或者其他数据库管理工具登录MySQL

-- 创建数据库如果不存在db_blbl,默认字符集为utf8,校对规则为utf8_general_ci
create database if not exists db_blbl default charset utf8 collate utf8_general_ci;

可以在Navicat的左分区查看创建好的数据库也可以在MySQL安装目录下的data里面查看

创建好db_blbl数据库后,要使用这个数据库,则执行命令

-- 切换数据库
use db_blbl

或者在Navicat中的查询窗口运行旁边有一个下拉框也可以手动选择切换数据库

2.2.创建测试数据表

输入如下命令,创建一个t_student学生表

create table t_student
(
   sid                  int not null comment '学号',
   sname                varchar(60) not null comment '姓名',
   sex                  tinyint not null default 1 comment '性别:1男, 2女',
   age                  tinyint not null comment ' 年龄',
   icard                varchar(18) not null comment '身份证,唯一约束',
   primary key (sid),
   unique key AK_Key_2 (icard)
) comment '学生信息表';

执行以下代码命令,往t_student学生表中插入数据

insert into t_student values(null,'张学友',1,36,'1234567891011');
insert into t_student values(null,'刘德华',1,39,'1234567891011');

执行完成后可以执行查询语句查看此时表中有两条数据

-- 查询t_student
select * from t_student

三、全量备份恢复数据库

3.1.全量备份数据库

打开cmd窗口,cd进入到MySQL安装目录的bin目录下

在bin目录下执行如下命令,将刚才创建的db_blbl数据库进行全量备份操作

mysqldump --opt --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE -u root --password=mysql.com db_blbl t_student > "C:\beifen.sql"

说明:

  • host=127.0.0.1就是你要备份的数据库IP地址
  • port=3306数据库端口号
  • "C:\beifen.sql"将db_blbl数据库全量备份到C盘根目录下,取名叫beifen.sql
  • db_blbl t_student 就是你要备份的数据库名和表名,可以对db_blbl进行全库备份,也可以单独对t_student表进行全量备份

注意:

备份的盘符一定要和MySQL安装目录在同一个盘符中,要不然会提示:拒绝访问

备份不需要的表操作

可以在上面代码表的位置加上--ignore-table=数据库名.表名

-- 实例
mysqldump --opt --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE -u root --password=mysql.com db_blbl --ignore-table=db_blbl._t_student> "C:\beifen.sql"

备份完成后,会自动在对应目录下生成一个sql文件,可以前往对应目录查看全量备份的数据库

我们可以将上述步骤封装到一个.bat批处理脚本文件中,然后双击运行该批处理文件即可执行全量备份数据库

全量备份数据库脚本如下

rem Auther By Anker
rem date:202435
rem ******Backup MySQL Start******
@echo off
::设置时间变量
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%"
 
::创建存储的文件夹
if not exist "C:\mysql_backup" md "C:\mysql_backup"
 
::执行备份操作
"C:\Program Files\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysqldump" --opt --user=root --password=mysql.com --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "db_blbl" >C:\beifen_%Ymd%.sql
 
::删除90天前的备份数据
forfiles /p "C:\mysql_backup" /m backup_*.sql -d -90 /c "cmd /c del /f @path"
 
@echo on
rem ******Backup MySQL End******

3.2全量恢复数据库 

先将事先创建好的db_blbl数据库删除

-- 删除数据库db_blbl
drop database db_blbl;

我执行的是drop命令,相当于将数据库数据和结构全部删除了,此时需要重新将数据库结构给创建出来,才能执行还原恢复操作。所以,再次执行创建数据库命令

-- 创建数据库如果不存在db_blbl,默认字符集为utf8,校对规则为utf8_general_ci
create database if not exists db_blbl default charset utf8 collate utf8_general_ci;

然后再使用管理员方式打开命令行切换到这个db_blbl数据库,即use db_blbl

-- 切换数据库
use db_blbl

执行以下命令恢复被删除的db_blbl数据库

source C:\beifen.sql

查询t_student表,会发现之前的t_student表数据又回来了 

-- 查询t_student
select * from t_student

四、增量备份恢复数据库

4.1.增量备份数据库

往t_student学生表中再插入2条数据

查询命令查询t_student表,此时会发现又多了2条数据

-- 查询t_student
select * from t_student

执行truncate t_student;命令,删除t_student学生表里面的数据

【注意】

如果执行drop t_student;命令的话,则整个t_student表结构和数据都被删除了,此时只有通过全量进行恢复了

truncate t_student;

再次执行查询命令查询t_student表,会发现t_student表中已经无数据了

-- 查询t_student
select * from t_student

我们可以将备份操作封装到一个.bat批处理脚本文件中,然后双击运行该批处理文件即可执行增量备份数据库,
增量备份数据库脚本如下

rem Auther By Anker
rem date:202435
rem ******Backup MySQL Start******
@echo off
::设置时间变量
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%"
 
::执行增量备份操作
mysqladmin -u root -p mysql.com flush-logs
 
@echo on
rem ******Backup MySQL End******

【注意】

要根据自己的实际设置来配置这个脚本文件

4.2.增量恢复数据库 

执行增量恢复之前,需要先执行一次全量恢复,将数据库数据还原到之前最新的某个时间段的数据,即执行命令:source C:\beifen.sql

再次执行查询命令查询t_student表,会发现之前的t_student表数据又回来了,但是表中的数据只有张学友、刘德华,并没有后来新增的郭富城、王八

-- 查询t_student
select * from t_student

要想把后来新增的郭富城、王八数据还原回来,则需要用到bin-log文件了。即在mysql环境下运行如下命令

show binlog events in 'mysql-bin.000001';

查看binlog内容记录下的郭富城这条数据的开始位置和结束位置

在MySQL安装目录的data目录下执行如下命令,即可将data目录下需要备份的bin-log文件转换成sql文件

mysqlbinlog --no-defaults mysql-bin.000001 --start-position=4157--stop-position=4034> C:\zengliang.sql

此时会发现C盘自动生成一个zengliang.sql文件

执行如下命令,还原被删除的郭富城

source C://zengliang.sql;

再次执行查询命令查询t_student表,会发现之前的t_student表数据郭富城这条数据又回来了

-- 查询t_student
select * from t_student

 五、定时执行备份任务

5.1.任务计划程序 

在控制面板程序搜索列表中搜索“计划任务”,并打开

打开任务计划程序后,点击右侧的“创建基本任务”,并对计划任务的名称和描述进行编写

任意取一个名称,点击下一步

根据自己需要,点击选择定时执行的周期,点击下一步

设置所需要执行的时间,点击下一步

选择启动程序,并点击下一步

浏览选择编写完成的备份脚本文件,点击下一步

确认信息无误后点击完成

定时任务创建好后,可在任务列表中看到我们所创建的任务,可以通过右键该条任务进行删除等处理

【最后】

增量备份二进制日志建议每天刷新一次。这确保了数据库备份的频率足够高,以最小化数据丢失的风险。通过每天刷新增量备份,可以更有效地管理数据库的变化,并在需要时还原到最新的状态。

到此这篇关于Windows环境MySQL全量备份+增量备份的实现的文章就介绍到这了,更多相关MySQL全量备份+增量备份内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!