MySQL事务中的redo与undo

Posted 标配的小号

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL事务中的redo与undo相关的知识,希望对你有一定的参考价值。

undo:(用于事务回滚)
mysql从磁盘中读取数据到内存,对内存中的数据进行修改后,undo会保存修改前的数据。举个例子,用户将test表中a的值从原来的5改为新的值10,那么undo日志会保存修改前a的值5,即将旧数据恢复。
redo:(用于数据库的崩溃恢复)
MySQL修改内存中的数据后,并不会立即写入到磁盘中进行持久化,而是随机或者按一定规律进行持久化,这就可能导致内存中的数据在未写入磁盘进行持久化前,如果发生异常故障,将会导致内存中的数据丢失。redo日志就是为了解决这个问题。
写入redo的时机
修改mysql数据时,先修改的是从数据库中复制到内存的拷贝,然后这次修改的内容会追加到redo文件,(redo就是处理在这里可能发生的故障)最后才是commit到数据库中进行持久化。
写入undo的时机
在修改数据前,写入undo日志文件
再举个例子:
假设有A、B两个数据,值分别为1,2.
1. 事务开始
2. 记录A=1到undo log
3. 修改A=3
4. 记录A=3到 redo log
5. 记录B=2到 undo log
6. 修改B=4
7. 记录B=4到redo log
8. 将redo log写入磁盘
9. 事务提交

以上内容整理自https://www.jianshu.com/p/20e10ed721d0

以上是关于MySQL事务中的redo与undo的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中redo日志

事务--04---MySQL事务日志----redo日志

Mysql --09 Innodb核心特性——事务

MySql Undo Redo

MySQL事务日志Redo_Log之Crash_Safe原理和事务两阶段提交原理

分布式事务和mysql中undo和redo日志