【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) 装入有关的日志文件副本(转储结束时刻的日志文件副本) ,重做已完成的事务。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【IC每日一题:CDC多bits跨时钟传输+handShake】

IC每日一题:CDC多bits跨时钟传输handShake 1 八股题:CDC多bits跨时钟传输1.1 慢到快:MUX enbale同步器法1.1.1 分析1.1.2 时序图1.1.3 代码 1.2 快到慢:握手协议1.2.1 原理分析1.2.2 时序图1.2.3 代码题 2 手撕题:使用…

如何将MySQL彻底卸载干净

目录 背景: MySQL的卸载 步骤1:停止MySQL服务 步骤2:软件的卸载 步骤3:残余文件的清理 步骤4:清理注册表 步骤五:删除环境变量配置 总结: 背景: MySQL卸载不彻底往往会导致重新安装失败…

完美解决 vscode 多设备通过ssh登录远程服务器免密登录

文章目录 问题解决分支一:只需一个设备连服务器分支二:需要多台设备连服务器(即分支一成立的情况下,即已经有一个设备连接服务器了)确保权限正确注意 问题 麻烦,每次打开vscode都要输入密码才能连接服务器&…

mac|安装redis及RedisDesk可视化软件

一、安装 通过Homebrew安装 brew install redis 在安装过程可以得到以下信息: 1、启动redis或重新登陆redis brew services start redis 如果只想在前端运行,而不是在后端,则使用以下命令 /opt/homebrew/opt/redis/bin/redis-server /opt…

大学适合学C语言还是Python?

在大学学习编程时,选择C语言还是Python,这主要取决于你的学习目标、专业需求以及个人兴趣。以下是对两种语言的详细比较,帮助你做出更明智的选择: C语言 优点: 底层编程:C语言是一种底层编程语言&#x…

3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路

你好,我是忆~遂愿,全网3w粉丝,《遂愿盈创》社群主理人。 副业启航① | 遂愿盈创(对副业感兴趣免费可入,多种赚钱实战项目等你来,一起探寻副业快速变现的途径;以及对接互联网大厂商务合作&#x…

ubuntu下使用pocketsphinx进行语音识别

文章目录 前言一、pocketsphinx的介绍二、ubuntu下编译三、使用示例1.模型选择2.代码示例3.自定义字典 四、交叉编译总结 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源…

Redis的持久化以及性能管理

目录 一、Redis持久化概述 1.什么是Redis持久化 2.持久化方式 3.RDB持久化 3.1概念 3.2触发条件 3.3执行流程 3.4启动时加载 4. AOF持久化 4.1概念 4.2启动AOF 4.3执行流程 4.4启动时加载 5.RDB和AOF的优缺点 二、Redis性能管理 1.查看Redis内存使用 2…

科研绘图系列:R语言组合连线图和箱线图(linechart+boxplot)

文章目录 介绍加载R包数据数据预处理画图1画图2系统信息介绍 连线图(Line Chart)是一种常用的数据可视化图表,它通过将一系列数据点用直线段连接起来来展示数据随时间或有序类别变化的趋势。以下是连线图可以表示的一些内容: 时间序列数据:展示数据随时间变化的趋势,例如…

Webserver(3.1)线程

目录 创建线程终止线程连接已终止的进程二级指针 线程分离线程取消线程属性线程同步多线程卖票 创建线程 编译时需要加-pthread gcc pthread_create.c -o create -pthread#include<pthread.h> #include<stdio.h> #include<string.h> #include<unistd.h&…

WPS实现手机电脑同步文件

复制链接&#xff0c;发送微信&#xff0c;即可在手机端打开同步编辑文档。 当手机编辑文档后&#xff0c;会有如下提示: 根据提示&#xff0c;可选择文件更新版本。

ES海量数据插入如何优化性能?

2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》&#xff0c;探讨了大模型赋能下的研发变革及如何在公司和行业中落地&#xff0c;AI原生研发新范式的内涵和推动经验。 …

【linux】HTTPS 协议原理

1. 了解 HTTPS 协议原理 &#xff08;一&#xff09;认识 HTTPS HTTPS 也是一种应用层协议&#xff0c;是在 HTTP 协议的基础上引入了一个加密层 因为 HTTP协议的内容都是按照文本的方式进行传输的&#xff0c;这个过程中&#xff0c;可能会出现一些篡改的情况 &#xff08;…

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

PostgreSQL技术内幕17:PG分区表

文章目录 0.简介1.概念介绍2.分区表技术产生的背景3.分区类型及使用方式4.实现原理4.1 分区表创建4.2 分区表查询4.3 分区表写入4.4 分区表删除 0.简介 本文主要介绍PG中分区表的概念&#xff0c;产生分区表技术的原因&#xff0c;使用方式和其内部实现原理&#xff0c;旨在能…

RHCSA课后练习3(网络与磁盘)

1、配置网络&#xff1a;为网卡添加一个本网段IPV4地址&#xff0c;x.x.x.123 涉及的知识点 配置网络&#xff1a; ens160&#xff1a;en---表示以太网 wl---表示无线局域网 ww---表示无线广域网 注意&#xff1a;一个网络接口&#xff0c;可以有多个网络连接&#xff0c;但…

开发人员需要知道的 20个Git命令行技巧

前言 大多数开发人员每天都会使用 Git&#xff0c;但许多人只是对其功能略知一二。 学习一些 git 命令行技巧可以改变游戏规则&#xff0c;让你更高效、更有成效&#xff0c;对版本控制更有信心。 那么&#xff0c;让我们深入了解每个开发人员工具包中都应该有的 20 个 Git …

第十一章 综合案例--“精品课程网站“开发

1.网站的开发流程 网站开发流程通常分为几个关键阶段&#xff0c;每个阶段都有其特定的任务和目标。以下是一个典型的网站开发流程&#xff1a; 1. 需求分析 目标设定&#xff1a;明确网站的目标和目的。 受众研究&#xff1a;确定目标用户&#xff0c;了解他们的需求和偏好。…

VSCode 1.82之后的vscode server离线安装

概述 因为今天在公司开发项目的时候&#xff0c;需要离线配置vscode远程开发环境&#xff0c; 根据参考链接1配置了一遍&#xff0c;不管怎么重启&#xff0c;VSCODE都还是提示下载vscode server&#xff0c;后面在官方issue上找到了解决方案 解决方案 修改Remote SSH的配置…

Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)

目录、 1、r0-r15寄存器&#xff0c;保护现场&#xff0c;任务切换的原理 2、freertos移植 3、freertos的任务管理。 一、前言 写这篇文章的目的&#xff0c;是之前面试官&#xff0c;刚好问到我&#xff0c;移植FreeRTOS 到mcu&#xff0c;需要做哪些步骤&#xff0c;当时回…