Windows环境MySQL全量备份+增量备份

目录

一、环境准备

1.1.安装MySQL

1.2.添加log-bin日志配置

二、创建测试数据库和表

2.1.创建测试数据库

2.2.创建测试数据表

三、全量备份恢复数据库

3.1.全量备份数据库

3.2全量恢复数据库

四、增量备份恢复数据库

4.1.增量备份数据库

4.2.增量恢复数据库

五、定时执行备份任务

5.1.任务计划程序


一******、******环境准备

1.1.安装MySQL

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

如果没有安装MySQL环境,可以参考博客:http://t.csdnimg.cn/h8bHl

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

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

1.2.添加 log-bin 日志配置

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

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

sql 复制代码
log-bin=mysql-bin
server-id=1
binlog_format=MIXED

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

【注】

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

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

sql 复制代码
show variables like 'log_bin';

二、创建测试数据库和表

2.1.创建测试数据库

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

sql 复制代码
-- 创建数据库如果不存在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数据库后,要使用这个数据库,则执行命令

sql 复制代码
-- 切换数据库
use db_blbl

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

2.2.创建测试数据表

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

sql 复制代码
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学生表中插入数据

sql 复制代码
insert into t_student values(1,'张学友',1,36,'1234567891011');
insert into t_student values(2,'刘德华',1,39,'1234567891011');

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

sql 复制代码
-- 查询t_student
select * from t_student

三、全量备份恢复数据库

3.1.全量备份数据库

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

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

sql 复制代码
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"

说明:

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

注意:

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

备份不需要的表操作

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

sql 复制代码
-- 实例
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批处理脚本文件中,然后双击运行该批处理文件即可执行全量备份数据库

全量备份数据库脚本如下

bash 复制代码
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数据库删除

sql 复制代码
-- 删除数据库db_blbl
drop database db_blbl;

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

sql 复制代码
-- 创建数据库如果不存在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

sql 复制代码
-- 切换数据库
use db_blbl

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

sql 复制代码
source C:\beifen.sql

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

sql 复制代码
-- 查询t_student
select * from t_student

四、增量备份恢复数据库

4.1.增量备份数据库

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

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

sql 复制代码
-- 查询t_student
select * from t_student

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

【注意】

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

sql 复制代码
truncate t_student;

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

sql 复制代码
-- 查询t_student
select * from t_student

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

增量备份数据库脚本如下

bash 复制代码
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表数据又回来了,但是表中的数据只有张学友、刘德华,并没有后来新增的郭富城、王八

sql 复制代码
-- 查询t_student
select * from t_student

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

sql 复制代码
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文件

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

sql 复制代码
source C://zengliang.sql;

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

sql 复制代码
-- 查询t_student
select * from t_student

五、定时执行 备份 任务

******5.1.******任务计划程序

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

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

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

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

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

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

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

确认信息无误后点击完成

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

【最后】

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

相关推荐
成富2 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq273 分钟前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix6 分钟前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
小兜全糖(xdqt)1 小时前
mysql数据同步到sql server
mysql·adb
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全2 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻2 小时前
MySQL的分组函数
数据库·mysql
荒川之神2 小时前
ORACLE 闪回技术简介
数据库·oracle
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database