突然掉电,为啥MySQL也不会丢失数据?
csdh11 2025-01-02 15:31 3 浏览
MySQL采用buffer机制,避免每次读写进行磁盘IO,提升效率:
《缓冲池(buffer pool)》
《写缓冲(change buffer)》
《日志缓冲(log buffer)》
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里的数据,是需要落地的。
如上图所示,当有页数据要刷盘时:
第一步:页数据先memcopy到DWB的内存里;
第二步:DWB的内存里,会先刷到DWB的磁盘上;
第三步:DWB的内存里,再刷到数据磁盘存储上;
画外音:DWB由128个页构成,容量只有2M。
步骤2和步骤3要写2次磁盘,这就是“Double Write”的由来。
DWB为什么能解决“页数据损坏”问题呢?
假设步骤2掉电,磁盘里依然是1+2+3+4的完整数据。
画外音:只要有页数据完整,就能通过redo还原数据。
假如步骤3掉电,DWB里存储着完整的数据。
所以,一定不会出现“页数据损坏”问题。
画外音:写了2次,总有一个地方的数据是OK的。
自己实验了几十次,仍没能复现“页数据损坏”,在网上找了一个“页数据损坏”时,MySQL重启过程利用DWB修复页数据的图。
可以看到,启动过程中:
(1)InnoDB检测到上一次为异常关闭;
(2)尝试恢复ibd数据,失败;
(3)从DWB中恢复写了一半的页;
能够通过DWB保证页数据的完整性,但毕竟DWB要写两次磁盘,会不会导致数据库性能急剧降低呢?
分析DWB执行的三个步骤:
(1)第一步,页数据memcopy到DWB的内存,速度很快;
(2)第二步,DWB的内存fsync刷到DWB的磁盘,属于顺序追加写,速度也很快;
(3)第三步,刷磁盘,随机写,本来就需要进行,不属于额外操作;
另外,128页(每页16K)2M的DWB,会分两次刷入磁盘,每次最多64页,即1M的数据,执行也是非常之快的。
综上,性能会有所影响,但影响并不大。
画外音:
(1)write--ahead-log之所以性能高,就是因为顺序追加写;
(2)有第三方测评,评估约10%性能损失;
更具体的,InnoDB里有两个变量可以查看double write buffer相关的情况:
Innodb_dblwr_pages_written
记录写入DWB中页的数量。
Innodb_dblwr_writes
记录DWB写操作的次数。
可以通过:
show global status like "%dblwr%"
来进行查询。
结尾
MySQL有很强的数据安全性机制:
(1)在异常崩溃时,如果不出现“页数据损坏”,能够通过redo恢复数据;
(2)在出现“页数据损坏”时,能够通过double write buffer恢复页数据;
double write buffer:
(1)不是一个内存buffer,是一个内存/磁盘两层的结构,是InnoDB里On-Disk架构里很重要的一部分;
(2)是一个通过写两次,保证页完整性的机制;
知其然,知其所以然。
思路比结论重要,希望大家有收获。
本人花费2个月时间,整理了一套JAVA开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。
希望可以帮助一些想通过自学提升能力的朋友,领取资料,扫码关注一下
记得转发+关注+私信
私信回复【2022面试资料】
领取更多学习资料
相关推荐
- 史上最全的 Python 学习资料,PDF 电子书大合集(免费)
-
史上最全的Python学习资料最近一直有读者问我有没有好的Python学习资料,有没有好的PDF电子书。小白学习Python也有很长的时间了,搜集的资料也有非常多。今天整理了下,全部免...
- 16 款最佳免费开源 PDF 开发库 | OpenSSH 9.9 发布,默认禁用 DSA 算法
-
16款最佳免费开源PDF开发库便携式文档格式(PDF)由AdobeSystems于1993年创建,用于文档交换。这种格式包括PostScript页面描述编程语言的子集、字体嵌...
- ?? 盘点Python入门必备神仙书籍|附pdf
-
Python编程从入门到实践整本书内容非常丰富,包含python相关基础知识和项目实践部分,基础知识部分基本上讲解了所有python相关的基础知识,实践部分选择了三个案例。非常适合初学者学习Pyth...
- Python 3.9.0 官方中文PDF文档,建议收藏,拿走不谢
-
最新版的Python官方文档!整理好了。领取方式见文末...
- Python趣味打怪:60秒学会一个例子,147段代码助你从入门到大师
-
鱼羊发自凹非寺量子位报道|公众号QbitAI人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Pyt...
- 咸鱼疯传3.6W次!Python16本高清版 PDF初学者的极佳教材荐
-
【文末有获取方式】【文末有获取方式】...
- 史上最详细python学习路线-从入门到精通,只需5个月时间
-
Python是一种功能很强大的语言,对于零基础学习Python还是有难度的,但只要学习方法对,入门还是很快哒。针对Python的初学者,从无到有的Python语言如何入门,主要包括了:Python的简...
- 硬核!288页Python核心知识笔记(附思维导图,建议收藏)
-
今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF...
- 这张思维导图,涵盖Python所有核心知识点,PDF赶快拿走
-
这张Python思维导图,涵盖了所有的核心知识点,包括基础知识、爬虫、函数、模块、类和对象等,从以往假大空的知识堆砌转变为清晰实用的知识体系...
- 顶级黑客用5分钟爬的python教程!整整400集,建议收藏
-
兄弟!毫无套路!!福利分享:1、本套视频一共400集,本套视频共分4季第一季Python基础。...
- 《Python知识手册》,高清全彩pdf版开放下载
-
Python编程还不懂?今天我要把我参与编写的这套《Python知识手册》免费分享出来,看完文末有惊喜哦。文末惊喜,记得看完哦!...
- 1张思维导图,告诉你Python核心知识体系,高清PDF拿走不谢
-
这张思维导图按顺序依次展示了以下内容的核心知识:基础知识、函数、文件、类和对象、魔方方法、模块、爬虫等内容。每一部分都细致展开解读,化复杂为具体,化零散为整体,尤其适合Python初学者参考学习。Py...
- 清华教授熬夜开发的《Python王者归来》高清版PDF开放下载
-
相信通过这本资料你可以轻松学会Python语法与应用,并逐步向Python高手之路迈进!...
- 一周热门
-
-
一文读懂关于MySQL Datetime字段允许插入0000-00-00无效日期
-
MySQL数据库关于表的一系列操作 mysql 表操作
-
一款全能的看图软件,速度快、功能强、免费用
-
IDC机房服务器托管可提供的服务
-
新版腾讯QQ更新Windows 9.9.7、Mac 6.9.25、Linux 3.2.5版本
-
深度测评:Pixave 和图片管理之间的距离(二)
-
查看 CAD文件,电脑上又没装AutoCAD?这款CAD快速看图工具能帮你
-
Boston Dynamics Founder to Attend the 2024 T-EDGE Conference
-
Serv-u 提权
-
一文看懂mysql时间函数now()、current_timestamp() 和sysdate()
-
- 最近发表
-
- 史上最全的 Python 学习资料,PDF 电子书大合集(免费)
- 16 款最佳免费开源 PDF 开发库 | OpenSSH 9.9 发布,默认禁用 DSA 算法
- ?? 盘点Python入门必备神仙书籍|附pdf
- Python 3.9.0 官方中文PDF文档,建议收藏,拿走不谢
- Python趣味打怪:60秒学会一个例子,147段代码助你从入门到大师
- 咸鱼疯传3.6W次!Python16本高清版 PDF初学者的极佳教材荐
- 史上最详细python学习路线-从入门到精通,只需5个月时间
- 硬核!288页Python核心知识笔记(附思维导图,建议收藏)
- 这张思维导图,涵盖Python所有核心知识点,PDF赶快拿走
- 顶级黑客用5分钟爬的python教程!整整400集,建议收藏
- 标签列表
-
- huaweiupdateextractor (27)
- mysql 时间索引 (31)
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- oracle timestamp比较大小 (28)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- 加密与解密第四版pdf (30)
- jemeter官网 (31)
- parsevideo (33)
- 个人网站源码 (37)
- ckeditor4中文文档 (27)
- exe4j_java_home (30)
- centos7.4下载 (33)
- xlsx.full.min.js下载 (32)
- 深度学习 pdf (28)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- usb2.0-serial驱动下载 (30)
- vs2010官网 (31)
- python核心编程第四版pdf (32)