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 …...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...