首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈Redo Log和Undo Log

概述 在MYSQL中,日志是非常重要的,其中Redo log 和undo log都是引擎层(innodb)实现的日志,redo log 是重做日志,提供 前滚 操作,undo log 是回退日志,提供...事务提交成功由redo log保证数据持久性,而事务可以进行回滚从而保证事务操作原子性则是通过undo log 来保证的。...undo log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread...总结 redo log日志记录的是数据页的物理变化,服务宕机可用来同步数据,而undo log 不同,它主要记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据,比如我们删除一条数据的时候,就会在...redo log保证了事务的持久性,undo log保证了事务的原子性和一致性 ​

20411
您找到你想要的搜索结果了吗?
是的
没有找到

Mysql的redoundo日志

因此引入了另外一 种机制来实现持久化,即Redo Log. Redo+Undo Log 原理:和Undo Log相反,Redo Log记录的是新数据的备份。...系统可以根据 Redo Log的内容,将所有数据恢复到最新的状态。 Undo + Redo事务的简化过程 假设有A、B两个数据,值分别为1,2 A.事务开始. B.记录A=1到undo log....D.记录A=3到redo log. E.记录B=2到undo log. F.修改B=4. G.记录B=4到redo log. H.将redo log写入磁盘。...Redo Log 保证事务的持久性。 Undo Log 保证事务的原子性。 有一个隐含的特点,数据必须要晚于redo log写入持久存储。...IO性能 Undo + Redo的设计主要考虑的是提升IO性能。虽说通过缓存数据,减少了写数据的IO。但是却引入了新的IO,即写Redo Log的IO。

32730

MySQL redoundo日志解析

前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。...相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测的。本篇文章将主要介绍这两类事务日志的作用及运维方法。...但也不推荐 redo log 设置过大。 回滚日志(undo log) undo log 主要用于保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚。...innodb_undo_directory:设置 undo 表空间的存放目录,默认数据目录。 innodb_undo_log_truncate:设置 undo 表空间是否自动截断回收。...总结: 本篇文章主要介绍了 redo log 及 undo log 的作用和相关参数设置,文章写的比较匆忙,如有错误,可以留言指出。关于这两类日志更深层次的内容,可能笔者功力还不到,未能写到更加透彻。

59520

MySQL redoundo日志解析

前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。...相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测的。本篇文章将主要介绍这两类事务日志的作用及运维方法。...但也不推荐 redo log 设置过大。 2.回滚日志(undo log) undo log 主要用于保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚。...innodb_undo_directory:设置 undo 表空间的存放目录,默认数据目录。 innodb_undo_log_truncate:设置 undo 表空间是否自动截断回收。...总结: 本篇文章主要介绍了 redo log 及 undo log 的作用和相关参数设置,文章写的比较匆忙,如有错误,可以留言指出。关于这两类日志更深层次的内容,可能笔者功力还不到,未能写到更加透彻。

60620

关于 Oracle redoundo 的认识

什么是undo(用于回滚数据) 从概念上讲,undo正好与redo相对。...redo用于在失败时重放事务(即恢复事务),undo则用于取消一条语句或一组语句的作用。 三....redo--> undo-->datafile insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上....) redo->已递交的事务,实例恢复时要写到数据文件去的 undo->未递交的事务. redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中...只有先redo apply 成功了,才能保证undo datafile 里面的东西都是正确的,然后才能rollback 做undo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行redo是保证系统的一致性

1.3K11

详解MySQL的Redo日志与Undo日志

概念与理解 Redoundo并非是相互的逆操作,而是能配合起来使用的两种机制。...确实,在日志中的每一个事务最终应该或者有一条commit记录,或者有一条abort记录,完全能筛选出目标事务再redo,但这样增加了redo阶段的复杂性,所以是根据日志统一redo,之后的撤销工作交给undo...1.3 Undo Undo是逻辑日志,并不幂等,在撤销时,根据undo记录进行补偿操作。Undo本身也产生redo记录。通过undo日志数据库可以实现MVCC。...因为在redo日志有commit或abort记录的事务是无需undo的。....在redo阶段,发现一条记录,就将T加入到undo-list 3.在redo阶段,发现一条或记录,就将T从undo-list删除 4.此时undo-list

1.9K20

redo日志和undo日志区别是什么?

我们都知道innoDb刷新数据到磁盘是通过页为单位来刷新的,那么总不能每次修改一条数据或者几条,就把整个页刷新到磁盘上,所以这时候redo日志的作用就是记录每条新增或者修改后的数据,在以后特定的时间flush...Flush那些修改之后的脏页,当redo日志满了之后,就会有限flush脏页到磁盘,来腾出redolog空间,这时候就会影响数据库的查询性能。...那么undo日志是干嘛的呢?...他是记录需要回滚的数据,比如insert如果需要回滚,那么至少需要记录他的数据id,如果update操作需要回滚,至少要记录他修改前的数据,如果delete需要回滚,那么至少要记录他删前的数据,所以select没有undo...Undo日志的isert和delete和update是不同的,delete需要注意的,数据结构有个特定的old_roll_pointer,指向未删除之前的数据结构作用于恢复。

21710

InnoDB如何实现事务、undo log、redo log、binlog

InnoDB如何实现事务、undo log、redo log、binlog InnoDB是MySQL的默认存储引擎,它使用多版本并发控制(MVCC)和锁机制来实现事务。...一个TCB中保存了以下信息: 事务ID; 最近使用的系统版本号; undo log链表指针:用于回滚; redo log链表指针:用于重做; 事务状态标识:活跃、准备阶段、回滚、提交。...3. undo log InnoDB采用undo log来实现对事务的回滚操作。...当一个事务开始后,会在内存中为其分配一块undo log,并在该事务执行修改数据表之前将相关数据先拷贝到undo log中。如果事务执行失败或者回滚,则可以通过undo log还原修改之前的数据。...4. redo log InnoDB采用redo log来实现对事务的重做操作。redo log是指数据库系统执行修改操作时所记录的日志,它的主要作用是确保当数据库崩溃时不会丢失数据更新操作。

16010

mysql三大日志-binlog、redo log和undo log

作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。...undo log 数据库事务四大特性中有一个是原子性,具体来说就是 原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。...实际上,原子性底层就是通过undo log实现的。...undo log主要记录了数据的逻辑变化,比如一条INSERT语句,对应一条DELETE的undo log,对于每个UPDATE语句,对应一条相反的UPDATE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态...同时,undo log也是MVCC(多版本并发控制)实现的关键。

2.3K31

还分不清bin log 、redo log 跟 undo log?

前言 MySQL 日志包含了错误日志、查询日志、慢查询日志、事务日志、二进制日志等,如果存储引擎使用的是 InnoDB ,二进制日志(binlog)和事务日志(包括redo log和undo log)...redo log 是有固定大小的,所以它的空间会用完,如果用完的话,一定要进行一些写入磁盘的操作才可以继续; binlog 是可以追加写入的,也就是 binlog 没有空间的概念,一直写就行了 undo...实际上,原子性底层就是通过undo log实现的。...undo log主要记录了数据的逻辑变化,比如一条UPDATE语句,对应一条相反UPDATE的undo log,一条INSERT语句,对应一条DELETE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态...undo log是InnoDB存储引擎的一种日志,主要作用是回滚。

19110

一文聊透binlog、redo log、undo log

作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括redo log 和 undo log ),本文接下来会详细介绍这三种日志。...redo log基本概念 redo log 包括两部分:一个是内存中的日志缓冲( redo log buffer ),另一个是磁盘上的日志文件( redo logfile)。...mysql 每执行一条 DML 语句,先将记录写入 redo log buffer,后续某个时间点再一次性将多个操作记录写到 redo log file。...因此, redo log buffer 写入 redo logfile 实际上是先写入 OS Buffer ,然后再通过系统调用 fsync() 将其刷到 redo log file image.png...image.png redo log记录形式 前面说过, redo log 实际上记录数据页的变更,而这种变更记录是没必要全部保存,因此 redo log实现上采用了大小固定,循环写入的方式,当写到结尾时

25610

Mysql三大日志-binlog、redo log和undo log

作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括 redo log 和 undo log ),本文接下来会详细介绍这三种日志。...undo log 数据库事务四大特性中有一个是 原子性 ,具体来说就是 原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况 。...实际上, 原子性 底层就是通过 undo log 实现的。...undo log 主要记录了数据的逻辑变化,比如一条 INSERT 语句,对应一条 DELETE 的 undo log ,对于每个 UPDATE 语句,对应一条相反的 UPDATE 的 undo log...同时, undo log 也是 MVCC(多版本并发控制)实现的关键,这部分内容在 面试中的老大难-mysql事务和锁,一次性讲清楚!中有介绍,不再赘述。

32610

mysql日志:redo log、binlog、undo log 区别与作用

1、mysql常用日志 错误日志 查询日志 慢查询日志 事务日志【redo log(重做日志)、undo log(回滚日志)】 二进制日志【bin log】 主要介绍下redo log、undo log...4、undo log         概念:回滚日志,用来记录数据被修改前的信息。正好跟前面的重做日志进行相反操作。...9、undo log详解   undo 用来回滚行记录到某个版本。undo log 一般是逻辑日志,根据每行记录进行记录。   ...undo 日志用于记录事务开始前的状态,用于事务失败时的回滚操作;redo 日志记录事务执行后的状态,用来恢复未写入 data file 的已成功事务更新的数据。...例如某一事务的事务序号为 T1,其对数据 X 进行修改,设 X 的原值是 0,修改后的值为 1,那么 Undo 日志为 ,Redo 日志为 。

8.2K22

MySQL 日志(redo log 和 undo log) 都是什么鬼?

redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。...undo log不是redo log的逆向过程,其实它们都算是用来恢复的日志: 1.redo log通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页...2.undo用来回滚行记录到某个版本。undo log一般是逻辑日志,根据每行记录进行记录。 1.redo log 1.1 redo log和二进制日志的区别 redo log不是二进制日志。...在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。 undo log和redo log记录物理日志不一样,它是逻辑日志。...另外,undo log也会产生redo log,因为undo log也要实现持久性保护。 2.2 undo log的存储方式 innodb存储引擎对undo的管理采用段的方式。

1.4K40

一文掌握 binlog 、redo log、undo log

在MySQL 中我们经常会接触到三个核心日志,它们分别是:binlog 、redo log、undo log。...3、undo log 3.1 undo log设计目标 redo log 是也属于引擎层(innodb)的日志,从上面的redo log介绍中我们就已经知道了,redo log 和undo log的核心是为了保证...innodb事务机制中的持久性和原子性,事务提交成功由redo log保证数据持久性,而事务可以进行回滚从而保证事务操作原子性则是通过undo log 来保证的。...update undo log update undo log记录的是对delete和update操作产生的undo log。...总结 binlog 是MySQL server层的日志,而redo log 和undo log都是引擎层(InnoDB)的日志,要换其他数据引擎那么就未必有redo log和undo log了。

1K30

【图文详解】MySQL系列之redo log、undo log和binlog详解

这篇文章主要介绍了MySQL系列之redo log、undo log和binlog详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。...事务的实现 redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。 InnoDB存储引擎体系结构 ? ?...页可以被重用,之后新的undo log记录在当前undo log的后面 undo log分为: insert undo log update undo log 因为事务隔离性,insert undo...https://www.jb51.net/article/202911.htm ---- 必须了解的mysql三大日志-binlog、redo log和undo log 日志是mysql数据库的重要组成部分...作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。

13.7K64
领券