理解 InnoDB 如何处理崩溃恢复

在数据库领域,数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心,其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面,我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。

一、写入流程

  1. 修改页面:当事务对数据库页面进行修改时,首先在内存中的 Buffer Pool 完成操作。此时,被修改的页面成为 “脏页(Dirty Page)” ,就像刚画完画还未整理的画布,数据已变更但尚未持久化到磁盘。
  2. 记录重做日志(Redo Log):每次页面修改,InnoDB 会立即将操作记录到 Redo Log 中,并且同步写入磁盘。这就好比给每次修改都留了备份,即便系统突发崩溃,也能依据 Redo Log 将修改重新应用,确保数据不丢失。
  3. 准备刷新脏页:随着时间推移,Buffer Pool 中的脏页逐渐增多,如同堆满杂物的房间需要清理。InnoDB 会挑选一批脏页,准备将其刷新到磁盘,释放缓存空间,维持数据一致性。
  4. 写入 Doublewrite Buffer:在将选定的脏页写回数据文件前,InnoDB 会先将页面副本写入数据文件中的 Doublewrite Buffer 区域。此写入操作虽为异步,但必须成功完成后才会继续下一步,类似出门前确认门窗是否锁好。
  5. 写入最终位置:页面成功写入 Doublewrite Buffer 后,InnoDB 会尝试将其直接写入实际的数据文件位置。该写入也是异步的,并且能与写入 Doublewrite Buffer 的操作并行执行,就像同时进行烧水和准备泡茶材料,提高了效率。
  6. 确认写入完成:若两个写入操作都成功,页面可从 Buffer Pool 移除或标记为干净页面(Clean Page)。同时,Doublewrite Buffer 中对应的槽位标记为可用,供后续写操作使用,类似洗净用过的杯子以便下次再用。

二、崩溃恢复流程

若在写入过程中发生崩溃,InnoDB 重启后会执行以下恢复步骤:

  1. 分析 Redo Log:系统启动时,InnoDB 读取 Redo Log,确定哪些事务需要回滚或重做,如同经验丰富的侦探梳理线索,确保未完成的事务得到妥善处理,维护数据一致性。
  2. 检查 Doublewrite Buffer:InnoDB 检查 Doublewrite Buffer 中的页面,对比其与对应数据文件中的页面,查找是否存在因崩溃未完全写入的数据页,就像仔细核对两份文件是否一致。
  3. 修复部分写入的页面:对于部分写入的数据页,InnoDB 用 Doublewrite Buffer 中的完整副本来覆盖有问题的数据文件页面,如同用正确拼图块替换错误的,保证页面的一致性和完整性。
  4. 完成恢复:经过上述步骤,因崩溃导致的问题基本解决,数据库恢复正常运行。未提交的事务回滚,未持久化的已提交事务依据 Redo Log 重做。

三、极端情况下的应对策略

当 Doublewrite Buffer 也出现部分写入或损坏时,InnoDB 采取以下策略:

  1. 依赖 Redo Log:若 Doublewrite Buffer 中的页面不可用或损坏,InnoDB 完全依赖 Redo Log 进行恢复。Redo Log 记录了所有数据库页的修改,即便没有 Doublewrite Buffer 的协助,也能通过重放日志条目重建数据一致性。
  2. 页面修复:对于无法从 Doublewrite Buffer 获取完整副本的页面,InnoDB 根据 Redo Log 中的信息修复,可能需应用一系列日志记录,直至页面恢复到崩溃前状态。
  3. 回滚未提交事务:所有未提交的事务回滚,确保数据库处于一致状态。已提交的事务则根据 Redo Log 重做,保证其效果持久化。
  4. 标记问题页面:若某些页面因严重硬件故障等确实无法修复,InnoDB 标记这些页面为损坏,并排除在后续操作之外。数据库管理员可通过备份或其他手段恢复这部分数据。
  5. 重启后的进一步检查:在恢复正常服务前,InnoDB 执行额外的健康检查,如表空间一致性检查等,确保整个数据库系统的稳定性和可靠性。

四、双写过程

  1. 第一次写入(写入到 Doublewrite Buffer):准备将一个或多个脏页刷新到磁盘前,InnoDB 首先将页面副本写入数据文件中的 Doublewrite Buffer 区域。该区域位于共享表空间(如 ibdata1),是一段专门预留的连续空间,划分为两个 chunk,每个 chunk 可容纳 64 个页面(约 128MB,由 128 个 extent 组成,每个 extent 为 1MB) 。
  2. 第二次写入(写入到目标位置):页面成功写入 Doublewrite Buffer 后,InnoDB 尝试将其直接写入实际的数据文件位置。采用异步 I/O 操作,写入 Doublewrite Buffer 和写入最终位置的操作可在一定程度上并行执行。

InnoDB 凭借这套复杂精妙的机制,有效保护数据免受部分更新问题的影响,确保在极端情况下也能自动修复问题,维持数据的一致性和可靠性。这种设计使 InnoDB 在崩溃恢复时自动修正数据损坏,无需依赖额外备份或复杂过程。

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

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

相关文章

gentoo 中更改$PS1

现象:gentoo linux Xfce桌面,Terminal 终端,当进入很深的目录时,终端提示符会很长,不方便。如下图所示: 故需要修改$PS1 gentoo 默认的 PS1 在 /etc/bash/bashrc .d/10-gentoo-color.bash中定义&a…

安全防护前置

就业概述 网络安全工程师/安全运维工程师/安全工程师 安全架构师/安全专员/研究院(数学要好) 厂商工程师(售前/售后) 系统集成工程师(所有计算机知识都要会一点) 学习目标 前言 网络安全事件 蠕虫病毒--&…

【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现

文章目录 介绍Transformer核心组件架构图编码器(Encoder)解码器(Decoder) 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页:道友老李 欢迎加入社…

mysqldump+-binlog增量备份

注意:二进制文件删除必须使用help purge 不可用rm -f 会崩 一、概念 增量备份:仅备份上次备份以后变化的数据 差异备份:仅备份上次完全备份以后变化的数据 完全备份:顾名思义,将数据完全备份 其中,…

cf集合***

当周cf集合,我也不知道是不是当周的了,麻了,下下周争取写到e补f C. Kevin and Puzzle(999) 题解:一眼动态规划,但是具体这个状态应该如何传递呢? 关键点:撒谎的人不相…

大模型概述(方便不懂技术的人入门)

1 大模型的价值 LLM模型对人类的作用,就是一个百科全书级的助手。有多么地百科全书,则用参数的量来描述, 一般地,大模型的参数越多,则该模型越好。例如,GPT-3有1750亿个参数,GPT-4可能有超过1万…

Linux-CentOS的yum源

1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源,163源,sohu源,知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构,…

Deepseek智能AI--国产之光

以下是以每个核心问题为独立章节的高质量技术博客整理,采用学术级论述框架并增强可视化呈现: 大型语言模型深度解密:从哲学思辨到系统工程 目录 当服务器关闭:AI的终极告解与技术隐喻情感计算:图灵测试未触及的认知深…

如何用ChatGPT批量生成seo原创文章?TXT格式文章能否批量生成!

如何用ChatGPT批量生成文章?这套自动化方案或许适合你 在内容创作领域,效率与质量的天平往往难以平衡——直到AI写作技术出现。近期观察到,越来越多的创作者开始借助ChatGPT等AI模型实现批量文章生成,但如何系统化地运用这项技术…

【回溯+剪枝】组合问题!

文章目录 77. 组合解题思路:回溯剪枝优化 77. 组合 77. 组合 ​ 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 ​ 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,…

04树 + 堆 + 优先队列 + 图(D1_树(D7_B+树(B+)))

目录 一、基本介绍 二、重要概念 非叶节点 叶节点 三、阶数 四、基本操作 等值查询(query) 范围查询(rangeQuery) 更新(update) 插入(insert) 删除(remove) 五、知识小结 一、基本介绍 B树是一种树数据结构,通常用于数据库和操作系统的文件系统中。 B树…

【力扣】283.移动零

AC截图 题目 思路 遍历nums数组,将0删除并计数,最后在nums数组尾部添加足量的零 有一个问题是,vector数组一旦erase某个元素,会导致迭代器失效。好在有解决办法,erase会返回下一个有效元素的新迭代器。 代码 class …

Games104——引擎工具链高级概念与应用

世界编辑器 其实是一个平台(hub),集合了所有能够制作地形世界的逻辑 editor viewport:可以说是游戏引擎的特殊视角,会有部分editor only的代码(不小心开放就会变成外挂入口)Editable Object&…

【力扣:新动计划,编程入门 —— 题解 ③】

—— 25.1.26 231. 2 的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:…

10 Flink CDC

10 Flink CDC 1. CDC是什么2. CDC 的种类3. 传统CDC与Flink CDC对比4. Flink-CDC 案例5. Flink SQL 方式的案例 1. CDC是什么 CDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数…

【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂

目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…

Python-基于PyQt5,wordcloud,pillow,numpy,os,sys等的智能词云生成器

前言:日常生活中,我们有时后就会遇见这样的情形:我们需要将给定的数据进行可视化处理,同时保证呈现比较良好的量化效果。这时候我们可能就会用到词云图。词云图(Word cloud)又称文字云,是一种文…

DeepSeek-R1论文研读:通过强化学习激励LLM中的推理能力

DeepSeek在朋友圈,媒体,霸屏了好长时间,春节期间,研读一下论文算是时下的回应。论文原址:[2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 摘要: 我们…

【深度分析】DeepSeek大模型技术解析:从架构到应用的全面探索

深度与创新:AI领域的革新者 DeepSeek,这个由幻方量化创立的人工智能公司推出的一系列AI模型,不仅在技术架构上展现出了前所未有的突破,更在应用领域中开启了无限可能的大门。从其混合专家架构(MoE)到多头潜…