返回顶部
首页 > 资讯 > 数据库 >深入理解MySQL重做日志redolog
  • 658
分享到

深入理解MySQL重做日志redolog

2024-04-02 19:04:59 658人浏览 独家记忆
摘要

目录一、redo log概念二、缓存、磁盘结构在事务的ACID特性中,原子性(A)、一致性(C)、持久性(D)由undo log和redo log实现,隔离性(I)由锁+mvcC实现

事务的ACID特性中,原子性(A)、一致性(C)、持久性(D)由undo log和redo log实现,隔离性(I)由+mvcC实现

undo log:事务还没有commit,中途执行异常,可以使用undo log把数据恢复到事务执行前的状态,确保事务的原子性

redo log:事务commit成功,由于更新磁盘数据需要一段时间,此时若发生异常,可以使用redo log重新执行这一事务的sql,确保事务的持久性(只要事务commit成功,不管发生什么异常事件,只要下一次MySQL服务正常进行,那上一次commit的数据一定要恢复回来

一、redo log概念

redo log:被称为物理日志,记录的就是最终修改后的按页面存储的数据页,直接存数据最终的状态,用于确保事务的持久性

undo log:被称为逻辑日志,存储的是具体的相应的SQL语句。如果现在执行的是insert,回滚的时候就执行delete;如果现在执行的update,就把原来的旧值再update回来

redo log默认放在/var/lib/Mysql

在这里插入图片描述

redo log是在事务begin时就开始记录(并不是事务commit时才记录,因为整个事务做的操作可能很多,如果在commit的时候才写redo log,此时一旦发生异常,redo log还没写,这就太晚了,无法确保事务的持久性),不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB会使用redo log恢复到掉电前的时刻,保证数据的完整性

innodb_log_buffer_size默认是16M,就是redo log缓冲区的大小,它随着事务开始,就开始写redo log,如果事务比较大,为了避免事务执行过程中花费过多磁盘io,可以设置比较大的redo log缓存,节省磁盘IO。往磁盘上刷是有刷新的时机,达到时机就花费磁盘IO,如果buffer比较大,会更慢的达到刷新的时机,效率更高。

在这里插入图片描述

InnoDB修改操作数据,不是直接修改磁盘上的数据,实际只是修改Buffer Pool中的数据。InnoDB总是先把Buffer Pool中的数据改变记录到redo log中,用来进行崩溃后的数据恢复。 优先记录redo log,然后再找时机慢慢的将Buffer Pool中的脏数据刷新到磁盘上。

innodb_log_group_home_dir指定的目录下的两个文件:ib_logfile0,ib_logfile1,该文件被称作重做日志

buffer pool缓存池: 可存放索引缓存、数据缓存等,可加速读写,直接操作数据页,写redo log修改就算完成,有专门的线程去做把buffer pool中的dirty page写入磁盘

buffer pool默认大小为134M(mysql 5.7)

在这里插入图片描述

大致结构如图所示:

在这里插入图片描述

事务读取,修改都是优先操作缓存池中的数据。在实际项目中,mysqld会单独的跑在一个机器上,可以分配大量的内存专门做InnoDB的buffer pool,加快CRUD

二、缓存、磁盘结构

在这里插入图片描述

当事务commit的时候,在关系图上的操作就是把InnoDB Log Buffer的内容写入磁盘,写成功的话,在磁盘上的redo log会记录状态——commit,如果没有写成功或者写完,则记录状态——prepare

log在写入磁盘的过程中也有可能发生异常,断电等问题,导致在写redo log的时候没有写完(这相当于事务没有commit成功),此时MySQL下次在恢复的时候就没有必要考虑这个事务的完整性,因为状态并不是commit,都写入磁盘上才表示redo log写成功,状态才变成commit。状态变成commit后需要维护事务的ACID特性。

是不是commit的时候,buffer poll里面的脏数据(数据有被修改)才被写入磁盘?

并不需要等commit的时候才开始。事务可能修改的数据量比较大,而缓存容量有限,对于buffer poll缓存的数据,会有专门的线程在合适的时间,往磁盘上去刷新,如果出现掉电,下一次MySQL启动后,会根据redo log里面记录的数据,对数据进行恢复。

undo log本身也是记录在redo log中

undo log支持事务回滚,也不是一瞬间就能完整,最终要修改的也是磁盘上的数据,为防止回滚过程中出现异常,所以undo log要记录在redo log里面。事务commit成功或者rollback成功,对于底层,都是成功的把操作写到redo log里面。

什么是真正的事务commit成功?

不是把数据全部刷到磁盘,而是把记录事务完整操作的redo log从log buffer写入磁盘,再把被修改数据的状态置为commit才算是实现了事务commit成功。此时虽然数据还在buffer poll,但只要我们的redo log保存完整,数据就可以恢复,会有专门的线程去负责把buffer poll里的数据写入磁盘

事务进行操作的时候,永远是先写redo log,然后才是写buffer pool;事务成功commit,就是要保证redo log完整记录到磁盘上

至于表数据的更改,buffer pool的脏数据页是不是刷新到磁盘上,我们根本不用担心,只要redo log完整的写到磁盘上,我们可以随时通过redo log重做日志来恢复事务成功commit的数据状态(数据库最重要的是日志,而不是数据

到此这篇关于深入理解MySQL重做日志 redo log的文章就介绍到这了,更多相关MySQL redo log内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 深入理解MySQL重做日志redolog

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

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

猜你喜欢
  • 深入理解MySQL重做日志redolog
    目录一、redo log概念二、缓存、磁盘结构在事务的ACID特性中,原子性(A)、一致性(C)、持久性(D)由undo log和redo log实现,隔离性(I)由锁+MVCC实现...
    99+
    2024-04-02
  • mysql两个重要的日志redolog和binlog
    一.redo log 使用原因 在 MySQL 里有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高 其实就是 MySQL 里经常说到的 WAL 技...
    99+
    2014-05-05
    mysql两个重要的日志redolog和binlog
  • MySQL 慢查询日志深入理解
    什么是慢查询日志 MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time 值的 SQL,则会被记录到慢查询日志中...
    99+
    2022-05-15
    MySQL 慢查询日志 MySQL 日志 MySQL 慢查询
  • MySQL三大日志——binlog、redoLog、undoLog详解
    目录跳转电梯 1. redoLog1.1 为什么需要redo log1.2 redo log基本概念1.3 redo log记录形式 2. binlog2.1 binlog基本概念2.2 binlog使用场景2.3 binlog...
    99+
    2023-08-19
    mysql redolog undolog binlog
  • 重做日志管理
    计算机操作的文件越大,系统的效率越低,因此,日志文件应该尽可能地小,但文件过小又会导致日志文件频繁切换,引发完全检查点,导致系统挂起 所谓的重做日志维护或修复,就是将有问题的重做日志组或日志成员删掉...
    99+
    2024-04-02
  • 详解MySQL 重做日志(redo log)与回滚日志(undo logo)
    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测...
    99+
    2022-05-11
    MySQL 重做日志 MySQL 回滚日志 MySQL redo和undo
  • 重做日志及归档日志的工作原理解析
    开门见山,先来看张图(PS:这张图是我从网上找的):工作原理:首先lgwr进程将redo log buffer中的重做数据写入到redo log中,此时的redo log分组,每当一个redo log gr...
    99+
    2024-04-02
  • 深入了解MySQL中的慢查询日志
    目录慢查询日志开启慢查询查看慢查询日志删除慢查询日志关闭慢查询日志慢查询日志 慢查询日志主要用来记录执行时间超过设置的某个时长的SQL语句,能够帮助数据库维护人员找出执行时间比较长、执行效率比较低的SQL语句,并对这些S...
    99+
    2023-03-19
    MySQL慢查询语句 MySQL慢查询优化
  • MySQL重做日志的概念是什么
    今天小编给大家分享一下MySQL重做日志的概念是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在事务的ACID特性中,原...
    99+
    2023-06-29
  • 深入理解Python编程中的日志技巧
    Python是一种广泛使用的编程语言,它在应用开发中被广泛使用。在Python应用程序中,日志记录是一项非常重要的技术。日志记录是指记录应用程序运行时产生的信息,这些信息可以帮助开发人员调试和优化应用程序。在本文中,我们将探讨Python编...
    99+
    2023-11-03
    日志 django 编程算法
  • SpringBoot深入了解日志的使用
    目录1. 日志的作用2. 日志怎么用3. 自定义日志打印3.1 得到日志对象3.2 使用日志对象提供的方法打印日志3.3 日志格式说明4. 日志级别4.1 日志级别分类4.2 日志级...
    99+
    2024-04-02
  • 深入理解 SpringBoot 日志框架:从入门到高级应用——(三)Logback 输出日志到 MySQL 数据库
    文章目录 添加依赖导入 SQL 文件配置 logback-spring.xml运行结果 Logback 是一个开源的日志框架,它支持多种日志输出方式,包括控制台输出、文件输出、邮件输出...
    99+
    2023-09-09
    数据库 mysql logback
  • MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结
    Undo Log 数据库事务开始之前,会将要修改的记录存放到 Undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 Undo 日志,撤销未提交事务对数据库产生的影响。 Undo Log产生和销毁 Undo L...
    99+
    2022-05-20
    MySQL 撤销日志Undo Log MySQL 重做日志Redo Log
  • 如何理解Oracle归档日志比联机重做日志小很多的情况
    本篇内容介绍了“如何理解Oracle归档日志比联机重做日志小很多的情况”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • MySQL 日志管理详解
    大纲 一、日志分类 二、日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一、日志分类 ·   &n...
    99+
    2024-04-02
  • 深入讲解MongoDB的慢日志查询(profile)
    前言 说到MongoDB的慢日志分析,就不得不提到profile分析器,profile分析器将记录的慢日志写到system.profile集合下,这个集合是一个固定集合。我们可以通过对这个集合的查询,来了解...
    99+
    2024-04-02
  • 深入理解java重载和重写
    目录重载1.构造器的重载2.方法的重载(overload)重写区分方法的重载和重写总结重载 1.构造器的重载 因为构造器的名字必须与类名相同,所以同一个类的所有构造器名肯定相同,构成...
    99+
    2024-04-02
  • MySQL基操---深入浅出增量断点备份与日志管理
    -----------------------------日志-----------------------------------MySQL的日志类型有以下几种:1.  错误日志(er...
    99+
    2024-04-02
  • 深入理解Java关键字在实时日志处理中的优势!
    Java作为一门高级编程语言,具有丰富的关键字和特性,这些关键字在实时日志处理中具有很大的优势。本文将深入探讨Java关键字在实时日志处理中的优势,并通过演示代码来加深对这些优势的理解。 一、final关键字 final关键字可以修饰变量、...
    99+
    2023-07-07
    实时 日志 关键字
  • 深入理解MySQL索引
    前言 当提到MySQL数据库的时候,我们的脑海里会想起几个关键字:索引、事务、数据库锁等等,索引是MySQL的灵魂,是平时进行查询时的利器,也是面试中的重中之重。 可能你了解索引的底层是b+树,会加快查询,也会在表中建立索引,但这是远远不够...
    99+
    2017-02-27
    深入理解MySQL索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作