文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

突然掉电,为啥MySQL也不会丢失数据?

2024-12-02 03:39

关注

MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。

如上图所示,MySQL里page=1的页,物理上对应磁盘上的1+2+3+4四个格。

那么,问题来了,这个操作并非原子,如果执行到一半断电,会不会出现问题呢?

会,这就是所谓的“页数据损坏”。

如上图所示,MySQL内page=1的页准备刷入磁盘,才刷了3个文件系统里的页,掉电了,则会出现:重启后,page=1的页,物理上对应磁盘上的1+2+3+4四个格,数据完整性被破坏。

画外音:redo无法修复这类“页数据损坏”的异常,修复的前提是“页数据正确”并且redo日志正常。

如何解决这类“页数据损坏”的问题呢?

很容易想到的方法是,能有一个“副本”,对原来的页进行还原,这个存储“副本”的地方,就是Double Write Buffer。

Double Write Buffer,但它与传统的buffer又不同,它分为内存和磁盘的两层架构。

画外音:传统的buffer,大部分是内存存储;而DWB里的数据,是需要落地的。

如上图所示,当有页数据要刷盘时:

画外音:DWB由128个页构成,容量只有2M。

步骤2和步骤3要写2次磁盘,这就是“Double Write”的由来。

DWB为什么能解决“页数据损坏”问题呢?

假设步骤2掉电,磁盘里依然是1+2+3+4的完整数据。

画外音:只要有页数据完整,就能通过redo还原数据。

假如步骤3掉电,DWB里存储着完整的数据。

所以,一定不会出现“页数据损坏”问题。

画外音:写了2次,总有一个地方的数据是OK的。

自己实验了几十次,仍没能复现“页数据损坏”,在网上找了一个“页数据损坏”时,MySQL重启过程利用DWB修复页数据的图。

可以看到,启动过程中:

能够通过DWB保证页数据的完整性,但毕竟DWB要写两次磁盘,会不会导致数据库性能急剧降低呢?

分析DWB执行的三个步骤:

另外,128页(每页16K)2M的DWB,会分两次刷入磁盘,每次最多64页,即1M的数据,执行也是非常之快的。

综上,性能会有所影响,但影响并不大。

画外音:

更具体的,InnoDB里有两个变量可以查看double write buffer相关的情况:

可以通过:

show global status like "%dblwr%"

来进行查询。

结尾

MySQL有很强的数据安全性机制:

double write buffer:

知其然,知其所以然。

思路比结论重要,希望大家有收获。

来源:架构师之路内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯