【MySQL】——数据库恢复技术

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯事务的基本概念

🎃事务

🎃事务的ACID特性

🎯数据库恢复概述

🎯故障的种类

🎃事务内部的故障

🎃系统故障

🎃介质故障

🎃计算机病毒

🎯恢复的实现技术

🎃  数据转储

✨静态转储与动态转储

✨海量转储与增量转储

🎃登记日志文件

✨日志文件的格式和内容

✨日志文件的作用

✨登记日志文件

🎯恢复策略

🎃事务故障的恢复

🎃系统故障的恢复

🎃 介质故障的恢复


🎯事务的基本概念

🎃事务

        事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

        事务和程序是两个概念

  • 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
  • 一个程序通常包含多个事务

        事务是恢复和并发控制的基本单位

事务结束

COMMIT

  • 事务正常结束
  •  提交事务的所有操作(读+更新)
  • 事务中所有对数据库的更新写回到磁盘上的物理数据库中

ROLLBACK

  • 事务异常终止
  • 事务运行的过程中发生了故障,不能继续执行
  • 系统将事务中对数据库的所有已完成的操作全部撤销
  • 事务滚回到开始时的状态

🎃事务的ACID特性

事务的ACID特性:

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持续性(Durability )

原子性

  • 事务是数据库的逻辑工作单位
  • 事务中包括的诸操作要么都做,要么都不做

一致性

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态

  • 一致性状态
    • 数据库中只包含成功事务提交的结果
  • 不一致状态
    • 数据库系统运行中发生故障,有些事务尚未完成就被迫中断;
    • 这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态

隔离性

  • 一个事务的执行不能被其他事务干扰
  • 一个事务内部的操作及使用的数据对其他并发事务是隔离的
  • 并发执行的各个事务之间不能互相干扰

持久性

  • 持续性也称永久性(Permanence)
  • 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
  • 接下来的其他操作或故障不应该对其执行结果有任何影响。

🎯数据库恢复概述

  • 故障是不可避免的
    • 计算机硬件故障
    • 软件的错误
    • 操作员的失误
    • 恶意的破坏
  • 故障的影响
    • 运行事务非正常中断,影响数据库中数据的正确性
    • 破坏数据库,全部或部分丢失数据

数据库的恢复

  • 数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复管理系统对故障的对策
  • 恢复子系统是数据库管理系统的一个重要组成部分
  • 恢复技术是衡量系统优劣的重要指标

🎯故障的种类

🎃事务内部的故障

  • 有的是可以通过事务程序本身发现的
  • 有的是非预期的,不能由事务程序处理的。

事务内部更多的故障是非预期的,是不能由应用程序处理的。

  • 运算溢出
  • 并发事务发生死锁而被选中撤销该事务
  • 违反了某些完整性限制而被终止等  

  以后,事务故障仅指这类非预期的故障

事务故障意味着

  • 事务没有达到预期的终点(COMMIT或者显式的ROLLBACK)
  • 数据库可能处于不正确状态。

事务故障的恢复:事务撤消(UNDO)

  • 强行回滚(ROLLBACK)
  • 该事务撤销该事务已经作出的任何对数据库的修改,使得该事务象根本没有启动一样

🎃系统故障

称为软故障,是指造成系统停止运转的任何事件,使得 系统要重新启动。

系统故障的类型

  • 特定类型的硬件错误(如CPU故障)
  • 操作系统故障
  • 数据库管理系统代码错误
  • 系统断电

系统故障的影响

  • 整个系统的正常运行突然被破坏
  • 所有正在运行的事务都非正常终止
  • 不破坏数据库
  • 内存中数据库缓冲区的信息全部丢失

🎃介质故障

称为硬故障,指外存故障

  • 磁盘损坏
  • 磁头碰撞
  • 瞬时强磁场干扰

介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务

介质故障比前两类故障的可能性小得多,但破坏性大得多

🎃计算机病毒

  •  一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序
  • 可以繁殖和传播,造成对计算机系统包括数据库的危害

计算机病毒种类

  • 小的病毒只有20条指令,不到50B
  • 大的病毒像一个操作系统,由上万条指令组成

计算机病毒的危害

  • 有的病毒传播很快,一旦侵入系统就马上摧毁系统
  • 有的病毒有较长的潜伏期,计算机在感染后数天或数月才开始发病
  • 有的病毒感染系统所有的程序和数据
  • 有的只对某些特定的程序和数据感兴趣

🎯恢复的实现技术

恢复机制涉及的关键问题

1. 如何建立冗余数据

  • 数据转储(backup)
  • 登记日志文件(logging)

2. 如何利用这些冗余数据实施数据库恢复

🎃  数据转储

        转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程

        备用的数据文本称为后备副本(backup)或后援副本

        数据库遭到破坏后可以将后备副本重新装入

        重装后备副本只能将数据库恢复到转储时的状态

        要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务

✨静态转储与动态转储

静态转储

  • 在系统中无运行事务时进行的转储操作
  • 转储开始时数据库处于一致性状态
  • 转储期间不允许对数据库的任何存取、修改活动
  • 得到的一定是一个数据一致性的副本

优点:

  • 实现简单

缺点:

  • 降低了数据库的可用性
  • 转储必须等待正运行的用户事务结束
  • 新的事务必须等转储结束

动态转储

  • 转储操作与用户事务并发进行
  • 转储期间允许对数据库进行存取或修改

优点

  • 不用等待正在运行的用户事务结束
  • 不会影响新事务的运行

动态转储的缺点

  • 不能保证副本中的数据正确有效

✨海量转储与增量转储

海量转储: 每次转储全部数据库

增量转储: 只转储上次转储后更新过的数据

海量转储与增量转储比较

  • 从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
  • 如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效

🎃登记日志文件

✨日志文件的格式和内容

什么是日志文件

  • 日志文件(log file)是用来记录事务对数据库的更新操作的文件

日志文件的格式

  • 以记录为单位的日志文件
  • 以数据块为单位的日志文件

以记录为单位的日志文件内容

  • 各个事务的开始标记(BEGIN TRANSACTION)
  • 各个事务的结束标记(COMMIT或ROLLBACK)
  • 各个事务的所有更新操作

✨日志文件的作用

用途

  • 进行事务故障恢复
  • 进行系统故障恢复
  • 协助后备副本进行介质故障恢复

具体作用

  • 事务故障恢复和系统故障恢复必须用日志文件。
  • 在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。

✨登记日志文件

为保证数据库是可恢复的,登记日志文件时必须遵循两条原则

  • 登记的次序严格按并发事务执行的时间次序
  • 必须先写日志文件,后写数据库
    • 写日志文件操作:把表示这个修改的日志记录写到日志文件中
    • 写数据库操作:把对数据的修改写到数据库中

🎯恢复策略

🎃事务故障的恢复

事务故障:事务在运行至正常终止点前被终止

恢复方法

  • 由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改

事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预

事务故障的恢复步骤

(1) 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。

(2) 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库。 插入操作, “更新前的值”为空,则相当于做删除操作 删除操作,“更新后的值”为空,则相当于做插入操作 若是修改操作,则相当于用修改前值代替修改后值

(3) 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。

(4) 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。

🎃系统故障的恢复

系统故障造成数据库不一致状态的原因

  • 未完成事务对数据库的更新可能已写入数据库
  • 已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库

恢复方法

1. Undo 故障发生时未完成的事务

2. Redo 已完成的事务

系统故障的恢复由系统在重新启动时自动完成,不需要用户干预

系统故障的恢复步骤

(1)正向扫描日志文件(即从头扫描日志文件)

  • 重做(REDO) 队列: 在故障发生前已经提交的事务
    • 这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录
  • 撤销 (UNDO)队列:故障发生时尚未完成的事务
    •  这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录

(2) 对撤销(UNDO)队列事务进行撤销(UNDO)处理

  • 反向扫描日志文件,对每个撤销事务的更新操作执行逆操作
  • 即将日志记录中“更新前的值”写入数据库  

(3)对重做(REDO)队列事务进行重做(REDO)处理

  • 正向扫描日志文件,对每个重做事务重新执行登记的操作
  • 即将日志记录中“更新后的值”写入数据库

🎃 介质故障的恢复

恢复步骤

(1) 装入最新的后备数据库副本(离故障发生时刻最近的转储副本) ,使数据库恢复到最近一次转储时的一致性状态。

  • 对于静态转储的数据库副本,装入后数据库即处于一致性状态
  • 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。

(2) 装入有关的日志文件副本(转储结束时刻的日志文件副本) ,重做已完成的事务。

  • 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。
  • 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Django REST framework构建RESTful API

使用Django REST framework构建RESTful API Django REST framework简介 安装Django REST framework 创建Django项目 创建Django应用 配置Django项目 创建模型 迁移数据库 创建序列化器 创建视图 配置URL 配置全局URL 配置认证和权限 测试API 使用Postman测试API 分页 过滤和排序…

Straightforward Layer-wise Pruning for More Efficient Visual Adaptation

对于模型中冗余的参数,一个常见的方法是通过结构化剪枝方法减少参数容量。例如,基于幅度值和基于梯度的剪枝方法。尽管这些方法在传统训练上通用性,本文关注的PETL迁移有两个不可避免的问题: 显著增加了模型存储负担。由于不同的…

微服务架构面试内容整理-服务拆分的原则

服务拆分是微服务架构设计的关键步骤,以下是一些常见的拆分原则: 1. 单一职责原则 每个微服务应只负责一项特定的业务功能或领域,确保服务的简单性和易于理解。 2. 业务能力驱动 根据业务能力或功能进行拆分,确保每个服务能够独立实现特定的业务价值。<

022集——统计多条线的总长度(CAD—C#二次开发入门)

如下图所示&#xff0c;选择多条线并统计长度&#xff1a; c#中不包含直接获取curve曲线长度 属性&#xff0c;需用如下方法&#xff1a;curve.GetDistanceAtParameter(item.EndParam) 附部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autode…

W5100S-EVB-Pico2评估板介绍

目录 1 简介 2 硬件资源 2.1 硬件规格 2.2 引脚定义 2.3 工作条件 3 参考资料 3.1 RP2350数据手册 3.2 W5100S数据手册 3.3 原理图 原理图 & 物料清单 & Gerber 文件 3.4 尺寸图&#xff08;单位&#xff1a;mm&#xff09; 3.5 参考例程 认证 CE FCC …

【Python】自然语言处理神器:NLTK库初探与文本处理案例

自然语言处理神器&#xff1a;NLTK库初探与文本处理案例 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Python 的 NLTK&#xff08;Natural Language Toolkit&#xff0c;自然语言工具包&#xff09;被广泛认为是入门级和应用级的强大工具之一。无论是处理文本、…

从放弃985计科保研到秋招进大厂,我是怎么做的?【秋招经验分享】

从放弃985计科保研到秋招进大厂&#xff0c;我是怎么做的 先来介绍一下我自己&#xff0c;bg为985计算机本科&#xff0c;我在放弃了计科保研以后&#xff0c;成功拿到了美团等大厂研发岗的offer。目前秋招已经接近尾声了&#xff0c;我想记录一下这段时间的秋招感悟和经验&…

STM32F103C8T6学习笔记4--模拟旋转编码器的按键中断

1、实验内容 通过旋转编码器正反转来计数&#xff0c;由对应的GPIO产生中断。但是我在Proteus里面没有找到相关的EC11旋转编码器元件&#xff0c;暂时通过电路模拟的方式实现。 S1按下引脚PB0产生低电平信号&#xff0c;触发中断&#xff0c;计数值减一。 S2按下引脚PB1产生低…

宝顶白芽,慢生活的味觉盛宴

在快节奏的生活中&#xff0c;人们愈发向往那种悠然自得、返璞归真的生活方式。白茶&#xff0c;以其独特的韵味和清雅的风格&#xff0c;成为了现代人追求心灵宁静与生活品质的象征。而在众多白茶之中&#xff0c;竹叶青茶业出品的宝顶白芽以其甘甜醇爽的特质&#xff0c;成为…

23.智能停车计费系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2 相关概念和技术介绍 2.1 JAVA技术介绍 2.2 SpringBoot框架 2.3B/S架构 2.4 MySQL数据库 3 系统需求分析 3.1 问题定义 3.2 可行性分析 3.3系统用例分析 3.4 系统流程分析 3.4.1 登录流程 3.4.2 添加信息流程 3.4.3 删除信息流程 4…

C语言学习,标准库<locale.h>

<locale.h> 是 C 标准库中的一个头文件&#xff0c; 提供了本地化&#xff08;Localization&#xff09;和国际化&#xff08;Internationalization&#xff09;的支持。它提供了一组函数和宏来设置或查询程序的本地化信息&#xff0c;例如日期、时间、货币、数字格式等。…

Chrome 130 版本开发者工具(DevTools)更新内容

Chrome 130 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、网络&#xff08;Network&#xff09;面板更新 1. 重新定义网络过滤器 网络面板获新增了一些过滤条件&#xff0c;这些过滤条件是根据反馈重新设计的&#xff0c;特定于类型的过滤条件保持不变&…

清华双臂机器人扩散大模型RDT:先预训练后微调,支持语言、图像、动作多种输入(1B参数)

前言 通过上文介绍的GR2&#xff0c;我们看到了视频生成模型在机器人训练中的应用 无独有偶&#xff0c;和GR2差不多一个时期出来的清华RDT&#xff0c;其模型架构便基于视频生成架构DiT改造而成(当然&#xff0c;该清华团队其实也在DiT之前推出了U-ViT&#xff0c;具体下文会…

leetcode动态规划(二十六)-最长重复子数组

题目 718.最长重复子数组 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&#xff1a;长度最长的公共子数组是 [3,2,…

万彪离职,荣耀CEO赵明豪赌AI手机胜算几何?

"荣耀新的远方在哪里&#xff1f;" 作者 | 米 卢 编辑 | 卢旭成 10月30日晚&#xff0c;荣耀在深圳国际会展中心发布了AI旗舰手机mogic7系列&#xff0c;这意味着终于能真正独立操盘荣耀的CEO赵明&#xff0c;开始压上全部身家&#xff0c;豪赌AI手机。 赵明说&…

SpringBoot在线教育系统:集成第三方服务

5系统详细实现 5.1 普通管理员管理 管理员可以对普通管理员账号信息进行添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 普通管理员管理界面 5.2 课程管理员管理 管理员可以对课程管理员进行添加修改删除操作。具体界面如图5.2所示。 图5.2 课程管理员管理界面 5.3 …

uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题(PC端钉钉小程序 接口API回调函数不执行)

uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题 1. 问题描述2. 解决办法 使用钉钉提供的api 1. 问题描述 使用uni-app开发小程序&#xff0c;移动端钉钉小程序使用没问题&#xff0c;但是在PC端钉钉小程序却发现一些逻辑没有执行。经过后端接口日志查询&#…

六、Go语言快速入门之数组和切片

文章目录 数组和切片数组:one: 数组初始化:two: 数组的遍历:three: 多维数组:four: 将数组传递给函数 切片(Slice):one: 切片的初始化:star: new和make区别 :two: 切片的使用:three: 将切片传递给函数:four: 多维切片:four: Bytes包:four: 切片和垃圾回收 &#x1f4c5; 2024年…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中&#xff0c;选择Design Settings打开窗口&#xff0c;会有六个选项&#xff1a;DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

ArcGIS Pro SDK (二十一)渲染

ArcGIS Pro SDK (二十一)渲染 文章目录 ArcGIS Pro SDK (二十一)渲染1 定义唯一值呈现器定义2 为最新观测值设置唯一值渲染器3 为先前的观测值设置唯一值渲染器4 设置简单的渲染器以绘制轨迹线5 检查先前的观测值和轨道线可见性6 使轨迹线和先前的观测点可见7 检索当前观测…