【数据库】数据库中的备份与恢复,保障容灾时的数据一致性与完整性

数据库的备份机制

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 数据库的备份机制
  • 前言
  • 概述
  • 备份的机制
    • 备份的类型
    • 备份流程
      • 静止转储
      • 非静止转储
  • 恢复的机制
    • 全量数据恢复
    • 增量数据恢复
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

现代数据库都管理者非常多的数据,数据库作为一个核心节点,需要考虑到各种故障的发生,数据库日志可以防止系统级的故障,但是对于介质级的故障却无能为力,这就需要在一个相对安全的距离上对数据进行备份。

本文就来分享一下数据库中关于备份的相关机制和面临的问题。

备份的机制

针对介质故障,一个或多个磁盘损坏时的故障应对。日志可以应对,系统故障的发生,当系统缓存中的脏数据丢失,而持久化到磁盘上的数据并不会丢失,此时使用日志进行回退撤销和重做,达到数据完整和一致性。

当磁盘损坏或者整个机房停电时,日志也是无法访问到的,此时就需要在一个安全距离的另一个地方对数据库进行备份,那么如何备份,备份所有数据,还是只备份日志就可以呢?

备份的类型

关于上面的几个问题,就涉及到我们的备份类型,一般会有以下几种备份类型:

  • 全量备份,也就是将数据库所有文件打包,然后备份到另外一个地方,包括数据,数据库运行产生的数据,以及日志数据等。
  • 增量备份,只备份与前一次备份的变化的数据,所有它需要基于一个全量备份才可以;如何找到与前一次的差异部分呢?通过数据文件是很难区分的,一般是备份增加的日志,这样日志中记录的就是增量部分。
  • 差异备份,这是延伸出来的一种备份类型,它指与第一次备份之后,产生的差异都进行备份;每次差异备份,都会与第一次备份进行比较,对变化的数据进行备份;

下面我们重点介绍前两种备份类型,对于差异备份,可以通过前两种来实现,也可以通过对数据标记的或者比较的方法来实现,理论上只是前两种的延伸,并没有改变备份的目的。

备份流程

在备份时,为了能够备份得到正确的数据,又可以分为在静止状态下备份和在运行时备份两种备份方式。

静止转储

静止状态,也就是数据库服务要停止,没有数据的访问产生。假设如果有数据的访问产生,会发生什么情况呢?

当我们在备份时,也就是拷贝数据文件时,该文件正在被写入,就会出现几种情况:

  • 我们拷的文件中,一个数据块被写了一部分,没有写全;
  • 我们拷的文件中,含有事务没有结束的数据;该事务可能提交,也可能中止,或者回退;

当然,在全量备份时为了避免上述问题,可以采用静止状态下的转储;

而对于增量备份,只是对于日志的备份,为了及时性,可以在日志落盘时同步进行复制,此时并不需要数据库业务停止,但是只有备份完此条日志了,才可以进行一下步。

非静止转储

对于静止状态的全量备份,在某此时候是非常不容易实现的,当业务运行时需要一个全量备份,又不能停止业务时,又如何办呢?
这就需要增加一些机制来解决上面提到的两个问题:

  • 对于数据块写不全的问题,在检查点之后,脏页写redo日志时会记录一次全量数据,这样即使数据文件中不正确时,可以通过redo日志来恢复;
  • 对于数据文件中的数据可能包括未结束事务的数据;在全量备份开始时,就要记录一个检查点,也可以称为数据库的快照,在拷贝过程中数据虽然可以发生变化,但在还可以通过日志恢复到数据库快照的时刻,达到数据的一致性;所以在数据备份完后,需要再备份全量的日志;

全量备份完成后,就要定期对增量产生的日志进行转储,或者实时流式的对产生的日志进行转储,这里需要注意,全量备份和增量备份之间的日志不能有丢失,要保持连续性,不然会有数据丢失。

恢复的机制

当故障发生时,就需要启用远程备份数据了,对于不同类型的备份数据,恢复的方法并不一样。

全量数据恢复

在启用备份数据时,肯定先要启用最近的一次全量备份的数据。

  • 全量数据启用时,先启动备份数据库服务,此时数据的一致性并不确定;
  • 需要通过备份时记录的快照和日志,对于检查点之后的日志进行redo操作,这样就可以数据的一致性;

当然这里单纯undo日志并不适合,需要redo日志或者redo/undo混合日志。

增量数据恢复

全量数据并不一定是最新数据,还需要在此基础上恢复后续的增量备份;

增量备份需要进行连续的进行redo日志恢复,从最早到最近一次,依次进行,最后数据达到最近一次备份时的数据状态。

当然增量备份与运行库之间的时间差越小,故障时数据丢失的越少。

总结

数据库管理的数据越来越多,而且越来越重要,对于数据库的故障和容灾保护机制也越来越复杂,甚至超越了数据库本身。

有菜也有肉的分享,下面插一段hello world的代码;

section .data  message db 'Hello, World!',0xa ; 定义字符串常量,0xa表示换行符  section .text  global _start  _start:  ; 输出Hello World字符串  mov eax, 4 ; 系统调用号,4表示输出字符串  mov ebx, 1 ; 文件描述符,1表示标准输出  mov ecx, message ; 字符串地址  mov edx, 13 ; 字符串长度  int 0x80 ; 发起系统调用  ; 退出程序  mov eax, 1 ; 系统调用号,1表示退出程序  xor ebx, ebx ; 返回值,0表示程序正常退出  int 0x80 ; 发起系统调用

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

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

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

相关文章

Postman插件如何安装(一)

我们chrome插件网热门推荐的软件之一就是postman。但是postman的适应平台分为:postman chrome应用程序,postman应用程序,postman插件。谷歌应用商店从2018年3月开始停止chrome应用程序的更新。除非继续使用老版本的postman chrome应用程序&am…

报表系统是什么?如何快速帮助企业数字化转型?

在信息洪流中,企业需要应对日益增长的数据量和复杂业务环境,这需要借助科技手段来驾驭数据管理和决策分析。报表系统,作为企业决策的重要工具,就如同航海的罗盘,帮助企业在数据的海洋中快速定位,从而提高管…

线程池有几种创建方式?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

来吧,SpringBoot的自动配置原理都在这里了

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

C运算符与表达式

跟着肯哥(不是我)学运算符与表达式 运算符 在C语言中,运算符是一种用来执行特定操作的符号或关键字。它们用于对变量、常量和表达进行计算、逻辑判断和位操作等。 定义一般都当耳旁风了 运算符分类 算术运算符 -*/%加减乘除取模,…

计算机组成原理(万字爆肝整理)

第一章 计算机系统概述 “较简单,不做过多赘述,后面会详细学到” 第一节 计算机系统层次结构 1.计算机系统的基本组成:硬件软件 2.计算机硬件的基本组成:运算器存储器控制器输入设备输出设备 3.系统软件和应用软件 系统软件…

【PyGIS】使用阿里AIEarth快速下载指定区域指定年份的土地利用数据

说明 中国逐年土地覆盖数据集(CLCD) 由武汉大学的杨杰和黄昕教授团队基于Landsat影像制作了中国逐年土地覆盖数据集(annual China Land Cover Dataset, CLCD),数据包含1985—2021年中国逐年土地覆盖信息。研究团队基于Landsat长时序卫星观测数据,构建时空特征,结合随机森…

编码的发展历史

编码的发展历史 ASCII: ASCII编码使用7位二进制数表示一个字符,范围从0到127。每个字符都有一个唯一的ASCII码值与之对应。例如,大写字母"A"的ASCII码是65,小写字母"a"的ASCII码是97。 ASCII字符集包括英文…

2023年【起重机械指挥】考试题及起重机械指挥找解析

题库来源:安全生产模拟考试一点通公众号小程序 起重机械指挥考试题考前必练!安全生产模拟考试一点通每个月更新起重机械指挥找解析题目及答案!多做几遍,其实通过起重机械指挥作业考试题库很简单。 1、【多选题】按照事故造成的人…

Java基础(程序控制结构篇)

Java的程序控制结构与C语言一致,分为顺序结构、选择结构(分支结构)和循环结构三种。 一、顺序结构 如果程序不包含选择结构或是循环结构,那么程序中的语句就是顺序的逐条执行,这就是顺序结构。 import java.util.Sc…

拒绝“信息茧房”,不做“井底之蛙”

前言 在信息爆炸的时代,我们每天都会被各种各样的信息包围着。这些信息来自各种渠道,如社交媒体、新闻媒体、搜索引擎、推荐系统等等。在算法和选择下,社交平台、购物平台帮大家过滤掉不熟悉、不喜欢、不感兴趣的内容,只推荐想看…

langchain 部署组件-LangServe

原文:🦜️🏓 LangServe | 🦜️🔗 Langchain LangServe 🚩 We will be releasing a hosted version of LangServe for one-click deployments of LangChain applications. Sign up here to get on the wa…