MySQL数据库,表的增量备份与恢复
1. 从物理与逻辑的角度
数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件(如数据 文件,日志文件等)的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。
物理备份又可以分为冷备份(脱机备份)、热备份(联机备份)和温备份。
冷备份:在数据库关闭状态下进行备份操作。
热备份:在数据库处于运行状态时进行备份操作,该备份方法依赖数据库的日志文件。
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。
逻辑备份是对数据库逻辑组件(如表等数据库对象)的备份,表示为逻辑数据库结构(CREATE DATABASE,CREATE TABLE语句)和内容(INSERT语句或分隔文本文件)的信息。这种类型的备份 适用于可以编辑数据值或表结构较小的数据量,或者在不同的机器体系结构上重新创建数据。
2. 从数据库的备份策略角度
从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份。
完全备份:每次对数据进行完整的备份,即对整个数据库的备份,数据库结构和文件结构的备 份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础,完全备份的备份与恢复操作 都非常简单方便,但是数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长。 差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完 整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份,以上次完整备 份或上次的增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间 小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依 次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
3.常见的备份方法
MySQL数据库的备份可以采用很多种方式,如直接打包数据库文件(物理冷备份)、专用备份工 具(mysqldump)、二进制日志增量备份、第三方工具备份等。
实验环境
某学校近期在进行期中考试,要求数据库管理员负责一班,二班学生的考试成绩录入,为保证数据的可靠性,数据库管理员在录入学生成绩后均要做数据库备份,并且为了测试备份数据是否可 用,模拟数据丢失故障,进行数据还原。
需求描述
在数据库表中,分三次录入学生考试成绩,具体的考试成绩信息分别参见表4-2~表4-4。



数据库在上一章已经创建好了
创建表一班学生成绩表
mysql> create table yiban (姓名 char(10) not null,班级 char(10) not null, 学号 char(10) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综 char(10) not null);

录入数据
mysql> insert into yiban(姓名,班级,学号,语文,数学,英语,理综)-> values('张三','一班','20170822','110','105','92','235'),-> ('李四','一班','20170820','95','115','110','260'),-> ('王五','一班','20170818','95','103','108','270'),-> ('赵六','一班','20170816','100','109','112','265');

创建二班学生成绩表
mysql> create table erban (姓名 char(10) not null,班级 char(10) not null, 学号 char(100) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综 char(10) not null);

录入数据
mysql> insert into erban(姓名,班级,学号,语文,数学,英语,理综)-> values('李宁','二班','20170824','92','98','105','235'),-> ('陈铭','二班','20170826','111','107','96','204');

创建三班学生成绩表
mysql> create table sanban (姓名 char(10) not null,班级 char(10) not null, 学号 char(100) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综 char(10) not null);

录入数据
mysql> insert into sanban(姓名,班级,学号,语文,数学,英语,理综)-> values('付杰','三班','20170828','115','118','116','268'),-> ('郭尚','三班','20170830','111','99','80','259');

> 首次录入成绩后,做该表的完全备份,后两次成绩的录入之后,分别做增量备份。
> 模拟数据丢失,并使用增量备份分别基于位置和时间点恢复二班和三班同学的成绩。
1) 先进行一次完全备份 为方便验证二进制日志的增量恢复功能,我们在插入三条用户数据后先对bdqn数据库的 yiban 表进行一次完全备份。然后在Linux 系统命令行下执行“mysqladmin -u root -p flush-logs”命令或在“mysql>”命令提示符下执行“flush logs;”生成新的二进制日志。
要进行MySQL的增量备份,首先要开启二进制日志功能,按图中命令操作

[root@node01 ~]# mkdir /mysql_bak //创建文件夹[root@node01 ~]# mysqldump -u root -p bdqn yiban >/mysql_bak/bdqn_yiban-$(date +%F).sql //将bdqn数据库中的一班表备份[root@node01 ~]# ls /mysql_bak/ //查看备份好的[root@node01 ~]# mysqladmin -u root -p flush-logs //生成新的二进制日志[root@node01 ~]# ls -l /usr/local/mysql/mysql-bin.*




2)继续录入新的数据并进行增量备份继续录入两个用户的数据,并执行‘mysqladmin -u root -p flush-logs”命令刷新二进制日志,进行增量备份,如此,二进制日志文件mysql-bin.000005中仅保留插入两个用户数据的操作。
mysql> use bdqn;mysql> insert into yiban(姓名,班级,学号,语文,数学,英语,理综) //将二班和三班的同学录入一班-> values('李宁','二班','20170824','92','98','105','235'),-> ('陈铭','二班','20170826','111','107','96','204'),-> ('付杰','三班','20170828','115','118','116','268'),-> ('郭尚','三班','20170830','111','99','80','259');mysql> select * from yiban;[root@node01 ~]# mysqladmin -u root -p flush-logs[root@node01 ~]# ls -l /usr/local/mysql/mysql-bin.*[root@node01 ~]# cp /usr/local/mysql/mysql-bin.000004 /mysql_bak/


3) 模拟误操作删除yiban表
[root@node01 ~]# mysql -u root -pmysql> use bdqn; //使用bdqn数据库mysql> drop table yiban; //模拟删除yiban表mysql> select * from yiban; 查看一班表是否被删除

yiban表已被删除

4)恢复操作(基于位置恢复)
再执行恢复操作时,需要先恢复完全备份,然后恢复增量备份。
root@node01 ~]# mysql -u root -p bdqn < /mysql_bak/bdqn_yiban-2023-12-14.sql //恢复完全备份


想要实现基于位置或时间点恢复数据,必须先通过查看二进制日志文件确定恢复的位置或时间 点,使用“mysqlbinlog --no-defaults 二进制日志文件”可以查看二进制日志文件的具体内容。
[root@node01 ~]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000004 //查看二进制日志文件的具体内容

通过查看日志文件的具体内容可以发现,在每进行一个操作之前都会有一个独特的编号,如“# at 617”.此编号随着操作数增多而变大,我们称之为操作ID。在操作ID下面紧跟着的是时间标记. 要实现基于位置或时间点恢复数据,需要分别依赖二进制日志文件中的操作ID或者时间标记.例如, 通过二进制日志文件得知,在操作ID为“617”的时候,user_info表中插入了“除一班外同学”的用户数据。 因此执行以下命令可以实现仅恢复到操作ID为“617”之前的数据,即不恢复“除一班外同学”的信息。这 时所恢复的数据是从二进制日志文件的开始位置直到指定位置。
[root@node01 ~]# mysqlbinlog --no-defaults --stop-position='617' /mysql_bak/mysql-bin.000004 | mysql -u root -p[root@node01 ~]# mysql -u root -p -e 'select * from bdqn.yiban;'
恢复成功

上述操作命令中,‘--stop-position”指定的是停止的位置,而“--start-position”选项指定开始恢复数据的位置。这时所恢复的数据是从指定位置开始直到二进制日志文件的最后。
基于时间点恢复
基于时间点恢复数据所使用的选项是“--start-datetime”,指定的时间同样也是查询二进制日志 所得。执行以下操作可以实现仅恢复到10:47:42之前的数据
模拟将二班和三班的同学删除后再进行恢复(如整个表都删除了,也需先恢复完全备份,再进行增量恢复)

增量备份基于时间点恢复

上图红框可看到时间
[root@node01 ~]# mysqlbinlog --no-defaults --start-datetime='2023-12-14 17:49:17' /mysql_bak/mysql-bin.000004 | mysql -u root -p[root@node01 ~]# mysql -u root -p -e 'select * from bdqn.yiban;'
恢复成功

相关文章:
MySQL数据库,表的增量备份与恢复
1. 从物理与逻辑的角度 数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件(如数据 文件,日志文件等)的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。 物理备份又可以分为冷备份…...
13.Spring 整合 Kafka + 发送系统通知 + 显示系统通知
目录 1.Spring 整合 Kafka 2.发送系统通知 2.1 封装事件对象 2.2 开发事件的生产者和消费者 2.3 触发事件:在评论、点赞、关注后通知编辑 3.显示系统通知 3.1 通知列表 3.1.1 数据访问层 3.1.2 业务层 3.1.3 表现层 3.2 开发通知详情 3.2.1 开发数据…...
windows 服务器 怎么部署python 程序
一、要在 Windows 服务器上部署 Python 程序,您需要遵循以下步骤: 安装 Python:首先,在 Windows 服务器上安装 Python。您可以从官方网站(https://www.python.org/downloads/windows/)下载最新的 Python 安…...
Chapter 7 - 2. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理
Location of Ingress No-Drop Queues入口无损队列的位置 Ingress queues for no-drop traffic are maintained by all the ports in a lossless Ethernet network. For the sake of simplicity, Figure 7-1 shows ingress no-drop queue(s) only at one location, but in real…...
深入理解前端项目中的 package.json
在前端开发中,package.json 是一个很重要的文件,它在Node.js和前端项目中扮演着重要的角色。这个文件用于存储项目的元数据以及管理项目的依赖关系。 package.json 文件是每个Node.js项目和许多前端项目的核心。它不仅定义了项目的基本属性,…...
4-Docker命令之docker build
1.docker build介绍 docker build命令是用来使用Dockerfile文件创建镜像 2.docker build用法 docker build [参数] PATH | URL | - [root@centos79 ~]# docker build --helpUsage: docker buildx build [OPTIONS] PATH | URL | -Start a buildAliases:docker buildx build…...
Hdfs java API
1.在主机上启动hadoop sbin/start-all.sh 这里有一个小窍门,可以在本机上打开8088端口查看三台机器的连接状态,以及可以打开50070端口,查看hdfs文件状况。以我的主虚拟机为例,ip地址为192.168.198.200,所以可以采用下…...
大数据Doris(三十七):索引和Rollup基本概念和案例演示
文章目录 索引和Rollup基本概念和案例演示 一、基本概念 二、 案例演示...
2019年第八届数学建模国际赛小美赛B题数据中心冷出风口的设计解题全过程文档及程序
2019年第八届数学建模国际赛小美赛 B题 数据中心冷出风口的设计 原题再现: 这是数据中心空调设计面临的一个问题。在一些数据中心,计算机机柜是开放的,在一个房间里排列成三到四排。冷却后的空气通过主管进入房间,并分为三到四个…...
mmpose 使用笔记
目录 自己整理的可以跑通的代码: 图片demo: 检测加关键点 自己整理的可以跑通的代码: 最强姿态模型 mmpose 使用实例-CSDN博客 图片demo: python demo/image_demo.py \tests/data/coco/000000000785.jpg \configs/body_2d_k…...
<url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的区别
<url-pattern>/</url-pattern> servlet的url-pattern设置为/时, 它仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求。直白点说就是,所有静态资源(js,css,ima…...
Spring IoCDI
文章目录 一、Spring、Spring boot、Spring MVC之间的区别1. Spring 是什么2. 区别概述 一、Spring、Spring boot、Spring MVC之间的区别 1. Spring 是什么 Spring 是包含了众多工具方法的 IoC 容器 (1)容器 容器是用来容纳某种物品的基本装置…...
vue使用el-tag完成添加标签操作
需求:做一个添加标签的功能,点击添加后输入内容后回车可以添加,并且标签可以删除 1.效果 2.主要代码讲解 鼠标按下后触发handleLabel函数,根据回车的keycode判断用户是不是按下的回车键,回车键键值为13,用…...
ACM-MM2023 DITN详解:一个部署友好的超分Transformer
目录 1. Introduction2. Method2.1. Overview2.2. UFONE2.3 真实场景下的部署优化 3. 结果 Paper: Unfolding Once is Enough: A Deployment-Friendly Transformer Unit for Super-Resolution Code: https://github.com/yongliuy/DITN 1. Introduction CNN做超分的缺点 由于卷…...
STM32超声波——HC_SR04
文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离:2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号,告诉单片机我准备好了,然后该超声波…...
[Excel] vlookup函数
VLOOKUP用法 VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])其中: lookup_value是你要查找的值table_array是你要在其中进行查找的表格区域col_index_num是你要返回的在table_array中列索引号range_lookup是一个可选参数,用于指定…...
Python入门第5篇(爬虫相关)
目录 爬虫初步说明 html相关基础 urllib之读取网页内容 http相关基础 requests之webapi调用 爬虫初步说明 爬虫,一句话来说,即模拟浏览器爬取一些内容,如自动下载音乐、电影、图片这种的 具体可能是直接访问网页进行解析,也…...
单元测试二(实验)-云计算2023.12-云南农业大学
1、实践系列课《深入浅出Docker应用》 https://developeraliyun.com/adc/scenarioSeries/713c370e605e4f1fa7be903b80a53556?spma2c6h.27088027.devcloud-scenarioSeriesList.13.5bb75b8aZHOM2w 容器镜像的制作实验要求 创建Dockerfile文件: FROM ubuntu:latest WORKDIR data…...
Axure动态面板的使用以及示例分享
目录 一. 什么是动态面板 二. 动态面板教程——以轮播图为例 2.1 创建动态面板 2.2 动态面板自适应大小 2.3 重复状态,将图片导入 2.4 添加交互事件——图片切换 2.5 效果展示 三. 多方式登录示例展示 四. 后台主界面左侧菜单栏示例展示 一. 什么是动态面板…...
容斥原理的并
文章目录 简介AcWing 890. 能被整除的数思路解析CODE 简介 推荐题解:https://www.acwing.com/solution/content/126553/ 画了图,清晰易懂,懒得打字了。 总之就是以下公式: S S 1 S 2 S 3 − S 1 ∩ S 2 − S 1 ∩ S 3 − S 2 …...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
