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 …...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
