聊聊mysql的七种日志

news2024/9/20 5:56:07

进入正题前,可以先简单介绍一下,MySQL的逻辑架构,

MySQL的逻辑架构大致可以分为三层:

  • 第一层:处理客户端连接、授权认证,安全校验等。
  • 第二层:服务器 server 层,负责对SQL解释、分析、优化、执行操作引擎等。
  • 第三层:存储引擎,负责MySQL中数据的存储和提取。

我们要知道MySQL的服务器层是不管理事务的,事务是由存储引擎实现的,而MySQL中支持事务的存储引擎又属 InnoDB 使用的最为广泛,所以后续文中提到的存储引擎都以 InnoDB 为主。

而且,可以再简单介绍一下,MySQL数据更新流程,作为铺垫,具体如下图:


一、redo log(重做日志)


redo log 属于MySQL存储引擎InnoDB的事务日志。
MySQL的数据是存放在磁盘中的,每次读写数据都需做磁盘IO操作,如果并发场景下性能就会很差。为此MySQL提供了一个优化手段,引入缓存Buffer Pool。

这个缓存中包含了磁盘中部分数据页(page)的映射,以此来缓解数据库的磁盘压力。
当从数据库读数据时,首先从缓存中读取,如果缓存中没有,则从磁盘读取后放入缓存;
当向数据库写入数据时,先向缓存写入,此时缓存中的数据页数据变更,这个数据页称为脏页,BufferPool中修改完数据后会按照设定的更新策略,定期刷到磁盘中,这个过程称为刷脏页。

如何保证数据不丢失 ,实现高可靠,实现事务持久性 ?

如果刷脏页还未完成,可MySQL由于某些原因宕机重启,此时Buffer Pool中修改的数据还没有及时的刷到磁盘中,就会导致数据丢失,无法保证事务的持久性。为了解决这个问题引入了redo log,redo Log如其名侧重于重做!

它记录的是数据库中每个页的修改,而不是某一行或某几行修改成怎样,可以用来恢复提交后的物理数据页,且只能恢复到最后一次提交的位置。

redo log用到了WAL(Write-Ahead Logging)技术,这个技术的核心就在于修改记录前,一定要先写日志,并保证日志先落盘,才能算事务提交完成。

有了redo log再修改数据时,InnoDB引擎会把更新记录先写在redo log中,再修改Buffer Pool中的数据,当提交事务时,调用fsync把redo log刷入磁盘。至于缓存中更新的数据文件何时刷入磁盘,则由后台线程异步处理。

注意:此时redo log的事务状态是prepare,还未真正提交成功,要等bin log日志写入磁盘完成才会变更为commit,事务才算真正提交完成。
这样一来即使刷脏页之前MySQL意外宕机也没关系,只要在重启时解析redo log中的更改记录进行重放,重新刷盘即可。

redo log 大小固定

redo log采用固定大小,循环写入的格式,当redo log写满之后,重新从头开始如此循环写,形成一个环状。


那为什么要如此设计呢?
因为redo log记录的是数据页上的修改,如果Buffer Pool中数据页已经刷磁盘后,那这些记录就失效了,新日志会将这些失效的记录进行覆盖擦除。

上图中的write pos表示redo log当前记录的日志序列号LSN(log sequence number),写入还未刷盘,循环往后递增;
check point表示redo log中的修改记录已刷入磁盘后的LSN,循环往后递增,这个LSN之前的数

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

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

相关文章

iPaaS生成数据库接口只要60秒?

“iPaaS生成数据库接口只要60秒?” 关于“iPaaS生成数据库接口只要60秒?”的说法,这实际上反映了iPaaS解决方案的一个重要优势:高效率。确实,借助iPaaS平台的现成集成工具和模板,用户可以迅速创建连接到特…

如何使用Douglas-042为威胁搜索和事件应急响应提速

关于Douglas-042 Douglas-042是一款功能强大的PowerShell脚本,该脚本可以提升数据分类的速度,并辅助广大研究人员迅速从取证数据中筛选和提取出关键数据。 该工具能够搜索和识别Windows生态系统中潜在的安全漏洞,Douglas-042会将注意力放在…

Java设计模式-结构型-适配器模式

Java设计模式-结构型-适配器模式 本文我们简单说下设计模式中的适配器模式。 一、概述 ​ 与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录:以架构师的能力标准去分析每个问题,过后由表及里分析问题的本质,复盘总结经验,并把总结内容记录下来。当你解决各种各样的问题,也就积累了丰富的解决问题的经验,解决问题的能力也将自然得到极大的…

【Python_Zebra斑马打印机编程学习笔记(一)】实现标贴预览的两种方式

实现标贴预览的两种方式 实现标贴预览的两种方式前言一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能1、Labelary Online ZPL Viewer API 案例介绍2、生成 PNG 格式3、Parameters 二、通过 zpl 的 label.preview() 方法实现标贴预览功能1、实现步骤2、代码示例 …

每日五道java面试题之spring篇(三)

目录: 第一题 ApplicationContext和BeanFactory有什么区别?第二题 Spring中的事务是如何实现的?第三题 Spring中什么时候Transactional会失效?第四题 Spring容器启动流程是怎样的?第五题 Spring Boot、Spring MVC 和 S…

__proto__和protype的区别

概述: prototype 函数静态属性,非实例属性,所有实例都可以继承它 __proto__ 实例属性,指向实例的原型对象,原型对象包括构造函数和protype属性 替代 现代浏览器中可以使用Object.getPrototypeOf()来替代__proto__来获取原型对象 …

主流的开发语言和开发环境介绍

个人浅见,不喜勿喷,谢谢 软件开发是一个涉及多个方面的复杂过程,其中包括选择合适的编程语言和开发环境。编程语言是软件开发的核心,它定义了程序员用来编写指令的语法和规则。而开发环境则提供了编写、测试和调试代码的工具和平台…

SQL面试题及答案

介绍 在快节奏的数据管理和信息技术世界中,导航和操作结构化数据的能力是一项非常重要的技能。SQL,即结构化查询语言,是关系数据库的基石,掌握这种语言的专业人员的需求量很大。SQL 面试在科技行业很常见,潜在的候选人会接受测试以展示他们的知识和解决问题的能力。为了帮…

【Spring】常见问题总结

目录 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块? 3. RestController vs Controller 4. Spring IOC & AOP 4.1 谈谈自己对于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么区别? 5. Spring bean 5.1…

OceanMind海睿思助力企业“数据入表”之价值实现与成本计量

2023年8月21日,财政部印发《企业数据资源相关会计处理暂行规定》(以下简称《暂行规定》),明确了数据资产会计处理适用的范围、准则、列示和披露要求。 《暂行规定》是规范企业数据资产会计处理指导性和引领性的制度文件&#xff…

微信小程序 --- wx.request网络请求封装

网络请求封装 网络请求模块难度较大,如果学习起来感觉吃力,可以直接学习 [请求封装-使用 npm 包发送请求] 以后的模块 01. 为什么要封装 wx.request 小程序大多数 API 都是异步 API,如 wx.request(),wx.login() 等。这类 API 接口…

探索无限:Sora与AI视频模型的技术革命 - 开创未来视觉艺术的新篇章

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

解决两个MySQL5.7报错

目录 1.启动不了MySQL,报错缺少MSVCR120.dll去官网下载vcredist_x64.exe运行安装进入管理员CMD 2.本地计算机 上的 mysql 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止,Fatal error: Can‘t open and lock privilege tables: Table ‘…

网络电视盒子哪个品牌好?达人强推口碑电视盒子推荐

电视盒子使用时容易卡顿、死机,广告植入过多,系统操作复杂,散热差,这是很多电视盒子都存在的问题,网络电视盒子哪个品牌好是大家都在讨论的话题,我这次要分享的是用户评价最好的五款电视盒子推荐给不懂如何…

操作系统-吸烟者问题

文章目录 概述问题分析如何实现小结 概述 操作系统中的吸烟者问题是一个经典的同步问题,它涉及到进程间的同步和互斥。 在这个问题中,有三个抽烟者进程和一个供应者进程。每个抽烟者需要三种材料:烟草、纸和胶水来完成吸烟的操作。三个抽烟…

http协议基础与Apache的简单介绍

一、相关介绍: 互联网:是网络的网络,是所有类型网络的母集因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。万维网:WWW(world…

Stable Diffusion 模型分享:AstrAnime(Astr动画)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五 下载地址 模型介绍 AstrAnime 是一个动漫模型,画风色彩鲜明,擅长绘制漂亮的小姐姐。 条目内容类型大模型…

vue中实现拖拽排序功能

npm i vuedraggable <template><div class"app-container"><!-- <div :class"canEdit ? dargBtn-lock el-icon-unlock : dargBtn-lock el-icon-lock" click"removeEvent()">{{ canEdit ? 调整 : 锁定 }}</div> --&…

Windows传文件到Linux系统(拖拽方式)

1、概述? 在平时开发过程中,可能会遇到如下场景: 在自己的Window系统中安装了VMware虚拟机,并在里面安装了Linux系统(Centos,Ubuntu,redhat等)。这个时候我们期望将window中的文件传递到Linux中,传递的过程比较的麻烦。 这个时候我们就可以借助相关工具直接拖拽完成。 …