iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 崩溃恢复过程分析
  • 695
分享到

MySQL 崩溃恢复过程分析

mysql数据库phpjava程序员 2023-09-16 14:09:59 695人浏览 泡泡鱼
摘要

天有不测风云,数据库有旦夕祸福。 前面写 Redo 日志的文章介绍过,数据库正常运行时,Redo 日志就是个累赘。 现在,终于到了 Redo 日志扬眉吐气,大显身手的时候了。 本文我们一起来看看,My

天有不测风云,数据库有旦夕祸福。

前面写 Redo 日志的文章介绍过,数据库正常运行时,Redo 日志就是个累赘。

现在,终于到了 Redo 日志扬眉吐气,大显身手的时候了。

本文我们一起来看看,Mysql 在崩溃恢复过程中都干了哪些事情,Redo 日志又是怎么大显身手的。

本文介绍的崩溃恢复过程,包含 server 层和 InnoDB,不涉及其它存储引擎,内容基于 mysql 8.0.29 源码

1. 概述

Mysql 崩溃也是一次关闭过程,只是比正常关闭着急了一些。

正常关闭时,MySQL 会做一系列收尾工作,例如:清理 undo 日志、合并 change buffer 缓冲区等操作。

具体会进行哪些收尾工作,取决于系统变量 innodb_fast_shutdown 的配置。

崩溃直接就是戛然而止,撂挑子不干了,还没来得及进行的那些收尾工作怎么办?

那就只能等待下次启动的时候再干了,这就是本文要介绍的崩溃恢复过程。

2. 读取两次写页面

MySQL 一旦崩溃,Redo 日志就要去拯救世界了(MySQL 就是它的世界),Redo 日志拯救世界的方式就是把还没来得及刷盘的脏页恢复到崩溃之前那一刻的状态。

虽然 Redo 日志能够用来恢复数据页,但这是有前提条件的:数据页必须完好无损的状态。

本文我们把系统表空间、独立表空间、undo 表空间中的页统称为数据页。

如果数据页刚写了一半,MySQL 就戛然而止,这个数据页就损坏了,面对这种情况,Redo 日志也是巧妇难为无米之炊。

Redo 日志拯救世界之路就要因为这个问题停滞不前吗?

那显示是不能的,这就该轮到两次写上场了。

两次写的官方名字是 double write,它包含内存缓冲区和 dblwr 文件两个部分,InnoDB 脏页刷盘前,都会先把脏页写入内存缓冲区,再写入 dblwr 文件,成功之后才会把网页刷盘。

两次写通过系统变量 innodb_doublewrite 控制开启或关闭,本文内容基于该系统变量的默认值 ON,表示开启两次写。

如果网页写入内存缓冲区和 dblwr 文件的程中,MySQL 崩溃了,表空间中对应的数据页还是完整的,下次启动时,不需要用两次写页面修复这个数据页。

如果脏页刷盘时,MySQL 崩溃了,表空间对应的数据页损坏了,下次启动时,应用 Redo 日志到数据页之前,需要用两次写页面修复这个数据页。

dblwr 文件 默认位于 MySQL 数据目录下:

[csch@csch /usr/local/mysql_8_0_29/data] ls -l | grep dblwr-rw-r-----    1 csch  staff   192K  8 27 12:04 #ib_16384_0.dblwr-rw-r-----    1 csch  staff   8.2M  8  1 16:29 #ib_16384_1.dblwr

MySQL 启动过程中,会把 *.dblwr 文件中的所有两次写页面加载到两次写内存缓冲区,并用内存缓冲区中的两次写页面修复损坏的数据页,然后再应用 Redo 日志到数据页。

3. 恢复数据页

应用 Redo 日志到数据页(3.4 小节),需要先读取 Redo 日志(3.3 小节)。

读取日志 Redo 日志,需要有个起点,起点就是最后一次 checkpoint 的 lsn(3.1 小节)。

应用 Redo 日志有一个前提:数据页必须是完好无损的。要保证数据页的完整性,应用 Redo 日志之前需要修复损坏的数据页(3.2 小节)。

修复损坏数据页只需要保证在应用 Redo 日志之前就行了,之所以安排在 3.2 小节,是遵循了源码中的顺序。

了解本节安排内容顺序的逻辑,有助于理解应用 Redo 日志恢复数据页的过程,接下来我们正式进入下一个环节。

3.1 找到 last_checkpoint_lsn

读取 Redo 日志之前,必须先确定一个起点,这个起点就是 InnoDB 最后一次 checkpoint 操作的 lsn,也就是 last_checkpoint_lsn。

每个 Redo 日志文件的前 4 个 block 都是保留空间,不会用来写 Redo 日志,last_checkpoint_lsn 和其它 checkpoint 信息一起,位于第 1 个 Redo 日志文件的第 2、4 个 block 中。

Redo 日志文件中每个 block 的大小为 512 字节。

InnoDB 每次进行 checkpoint 操作时,都会把 checkpoint_no 加 1,用于标识一次 checkpoint 操作。

然后把本次 checkpoint 信息写入 Redo 日志文件的第 2 或第 4 个 block 中。具体写入哪个 block,取决于 checkpoint_no。

如果 checkpoint_no 是奇数,checkpoint 信息写入第 4 个 block。

如果 checkpoint_no 是偶数,checkpoint 信息写入第 2 个 block。

确定读取 Redo 日志的起点时,从第 2、4 个 block 中读取较大的那个 last_checkpoint_lsn 作为起点。

为什么 checkpoint 信息要存储到 2 个 block 中?

这是一个用于保证 checkpoint 信息安全性的简单好用的方法,因为每次 checkpoint 只会往其中一个 block 写入信息。

万一就在某次写 checkpoint 信息的过程中 MySQL 崩溃了,有可能导致正在写入的这个 block 中的 checkpoint 信息不正确。

这种情况下,另一个 block 中的 checkpoint 信息肯定是正确的了,因为它里面的信息是上一次正常写入的。

能够用这种冗余方式来保证 checkpoint block 的安全性,基于一个前提:last_checkpoint_lsn 不需要那么精确。

last_checkpoint_lsn 比实际需要应用 Redo 日志起点处的 lsn 小是没关系的,不会造成数据页不正确,只是会多扫描一点 Redo 日志而已,应用 Redo 日志时会过滤已经刷盘的脏页对应的 Redo 日志。

3.2 修复损坏的数据页

把两次写文件中的所有数据页都加载到内存缓冲区之后,需要用这些页来把系统表空间、独立表空间、undo 表空间中损坏的数据页恢复到正常状态。

正常状态指的是 MySQL 崩溃之前,数据页最后一次正确的刷新到磁盘的状态。

恢复数据页的过程是对两次写内存缓冲区中的所有数据页进行循环,从两次写数据页中读取表空间 ID、页号,然后根据表空间 ID 和页号去系统表空间、独立表空间、undo 表

来源地址:https://blog.csdn.net/weixin_57907028/article/details/126850963

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 崩溃恢复过程分析

本文链接: https://www.lsjlt.com/news/410061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 崩溃恢复过程分析
    天有不测风云,数据库有旦夕祸福。 前面写 Redo 日志的文章介绍过,数据库正常运行时,Redo 日志就是个累赘。 现在,终于到了 Redo 日志扬眉吐气,大显身手的时候了。 本文我们一起来看看,My...
    99+
    2023-09-16
    mysql 数据库 php java 程序员
  • 基于Redo Log和Undo Log的MySQL崩溃恢复解析
    目录MySQL崩溃恢复流程 1、黑盒下的更新数据流程 2、Redo Log & Undo Log3、实现日志后的更新流程3、流程中仍然存在的问题4、基于2PC的一致性保障5、...
    99+
    2024-04-02
  • Mysql 5.5崩溃恢复的原理是什么
    本篇内容主要讲解“Mysql 5.5崩溃恢复的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql 5.5崩溃恢复的原理是什么”吧! ...
    99+
    2024-04-02
  • excel崩溃怎么恢复数据
    当Excel崩溃时,可以尝试以下方法恢复数据:1. 重新打开Excel:关闭当前的Excel程序,然后重新打开Excel,看看是否能...
    99+
    2023-09-29
    excel
  • Win7崩溃如何恢复数据
    本篇内容主要讲解“Win7崩溃如何恢复数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Win7崩溃如何恢复数据”吧!一、使用最后一次正确配置电脑重新开机后按“F8”键进入高级启动选项,选择“最...
    99+
    2023-07-01
  • Oracle崩溃恢复原理是什么
    本篇内容主要讲解“Oracle崩溃恢复原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle崩溃恢复原理是什么”吧!1. 应用场景当数据...
    99+
    2024-04-02
  • windows7系统崩溃后如何恢复windows7系统崩溃修复方式详细介绍
    windows7客户在应用计算机的历程中遇上了系统崩溃的状况,那麼应当如何恢复呢?有效的方法便是升级目前系统,去遮盖原先的,那样就能立即解决困难了。可以根据系统的还原作用,恢复系统到预先创建的还原点。你还可以通过在cmd对话框中输入sfc/...
    99+
    2023-07-16
  • SQL Server数据库崩溃后怎么恢复
    这篇文章主要讲解了“SQL Server数据库崩溃后怎么恢复”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server数据库崩溃后怎么恢复”吧!任何...
    99+
    2024-04-02
  • 线程崩溃不会导致 JVM 崩溃的原因解析
    目录线程崩溃,进程一定会崩溃吗进程是如何崩溃的-信号机制简介为什么线程崩溃不会导致 JVM 进程崩溃openJDK 源码解析总结参考文章网上看到一个很有意思的据说是美团的面试题:为什...
    99+
    2024-04-02
  • C语言最短的崩溃程序分析
    本篇内容主要讲解“C语言最短的崩溃程序分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言最短的崩溃程序分析”吧!通常学生们要么尝试反向引用一个非法地址,要么就是除0.除0会引发SIGFPE...
    99+
    2023-06-17
  • Win系统没有崩溃前如何恢复安装
    如果Windows 98系统没有完全崩溃,但有些系统错误通过磁盘扫描或纠错软件又没法修复,这时可以使用Windows 98的部分恢复安装程序。这个安装程序可以在Windows 98光盘的TOOLS文件夹里找到。 转入DO...
    99+
    2023-06-02
    win系统 恢复安装 Win 系统
  • OpenBSD如何处理系统故障和崩溃恢复
    OpenBSD通过以下几种方式处理系统故障和崩溃恢复: Kernel Panic:当系统遇到严重错误或异常情况时,可能会导致内核...
    99+
    2024-04-02
  • 亚马逊服务器崩溃原因分析
    软件问题:可能是由于系统中的错误或恶意软件引起的,例如病毒、蠕虫或间谍软件。 硬件问题:可能是由于过载、硬件故障或电源问题引起的,例如服务器内部温度过高、过载电源或服务器硬件故障。 网络问题:可能是由于网络拥堵、数据包丢失或网络攻击引起的...
    99+
    2023-10-27
    亚马逊 原因 服务器
  • 当数据库崩溃时:故障恢复策略的比较
    数据库崩溃是指数据库系统因意外事件(例如硬件故障、软件错误或电源中断)而无法正常运行的情况。在这种情况下,故障恢复策略至关重要,因为它可以帮助数据库恢复到可用状态并最大程度地减少数据丢失。 常见的故障恢复策略 1. 日志恢复 日志恢复是故...
    99+
    2024-03-10
    简介
  • 阿里云服务器崩溃原因分析
    硬件故障:服务器硬件故障是导致服务器崩溃的主要原因之一。比如服务器电源、硬盘故障、内存故障等,都可能导致服务器崩溃。 软件问题:操作系统、应用程序等软件的漏洞也可能导致服务器崩溃。例如,攻击者利用操作系统漏洞入侵服务器,或者应用程序中的漏...
    99+
    2023-10-27
    阿里 原因 服务器
  • EMC存储崩溃raid离线恢复数据方法是什么
    EMC存储崩溃raid离线恢复数据方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Riad数据恢复故障概述某公司的一台存储挂载了raid5磁盘阵列,正常...
    99+
    2023-06-05
  • 亚马逊服务器崩溃原因分析报告
    1. 介绍 亚马逊是全球最大的电子商务公司之一,其服务器基础设施是支撑其业务运作的关键组成部分。然而,偶尔会发生服务器崩溃的情况,给亚马逊和其用户带来了严重的影响。本报告将对亚马逊服务器崩溃的原因进行分析,并提供一些解决方案。 2. 崩溃...
    99+
    2023-10-27
    亚马逊 分析报告 原因
  • Android崩溃日志收集和保存代码分析
    这篇文章主要讲解了“Android崩溃日志收集和保存代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android崩溃日志收集和保存代码分析”吧!UncaughtExceptionHa...
    99+
    2023-07-05
  • 香港阿里云服务器崩溃原因分析
    1. 服务器过载 服务器过载是导致服务器崩溃的常见原因之一。当服务器处理的请求超过其处理能力时,服务器会变得不稳定并最终崩溃。这可能是由于流量过大、恶意攻击或其他原因导致的。 2. 硬件故障 硬件故障也是服务器崩溃的常见原因之一。硬件故障...
    99+
    2023-10-26
    阿里 香港 原因
  • jvm crash的崩溃日志详细分析及注意点
    生成 生成error 文件的路径:你可以通过参数设置-XX:ErrorFile=/path/hs_error%p.log, 默认是在Java运行的当前目录 [default: ./hs_err_pid%p.log] 参数-XX:OnErro...
    99+
    2023-05-31
    jvm crash j
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作