binlog、redolog和undolog区别?

在 MySQL 数据库中,binlog、redo log 和 undo log 皆属于日志类型文件,然而,它们的功能与实现方式存在着微妙的差异。

binlog 主要用于数据库的数据备份、崩溃恢复以及数据复制等操作;而 redo log 和 undo log 则主要用于事务管理,分别记录了数据修改操作和回滚操作的细节。redo log 用于数据恢复,而 undo log 则用于回滚事务。

崩溃恢复是指在数据库系统因各种原因而发生崩溃或非正常关闭后,通过一系列机制和步骤来将数据库恢复到一个一致性和可用的状态。这是数据库管理系统的重要功能之一,它确保在异常情况下数据库能够自动恢复,从而避免数据丢失或数据库状态不一致的问题。

在 MySQL 中,redo log 和 undo log 仅适用于 InnoDB 存储引擎,因为其支持事务特性,而不适用于其他存储引擎如 MyISAM 等。而 binlog 则适用于所有存储引擎。

binlog 是 MySQL 用于记录数据库中所有 DDL 语句和 DML 语句的二进制日志。它记录了对数据库结构和数据的所有修改操作,例如 INSERT、UPDATE 和 DELETE 等。binlog 主要用于数据库的数据备份、灾难恢复和数据复制等操作。binlog 的格式包括基于语句的格式和基于行的格式。

Redo Log 是 MySQL 用于实现崩溃恢复和数据持久性的机制 。在事务进行过程中,MySQL 会将事务所做的修改记录到 Redo Log 中。当系统发生崩溃或异常情况时,MySQL 利用 Redo Log 中的记录信息进行恢复操作,将事务所做的修改持久化到磁盘中。

Undo Log 用于在事务回滚或系统崩溃时撤销(回滚)事务所做的修改 。当一个事务执行时,MySQL 会将事务修改前的数据记录到 Undo Log 中。如果事务需要回滚,则会从 Undo Log 中找到相应的记录来撤销事务所做的修改。此外,Undo Log 还支持 MVCC(多版本并发控制)机制,用于在并发事务执行时提供一定的隔离性

很多人不知道该怎么记忆,可以参考网友的建议,可以这么记忆:

  1. undo 就是回退的意思,就跟在文本编辑器里面有一个 undo 按钮一样,你编辑的东西,按一下这个 undo 按钮就回退到上一个版本了。
  2. redo 是"re"+"do","re"就是重来一次的意思,"do"就是做的意思。所以连在一起,就是重新再做一遍,也就是重新再执行一次 sql。那么什么时候需要重新再执行一次 sql 呢?执行的数据丢了嘛,自然就需要重新执行一次。
  3. bin 就是"binary"的缩写,"binary"就是二进制的意思,可以引申为"原始"的意思,所以 bin log 就是最全最原始的东西,里面包含了一切,所以可以用来做备份,有了它,就有了一切。

undolog 和 redolog 在功能和记录内容上有着明显的区别:

  • 目的:Redo log 的目的是确保事务的持久性,主要用于崩溃恢复。而 Undo log 的目的是确保事务的原子性和一致性,主要用于事务回滚。
  • 记录内容:Redo Log 记录了事务的所有数据更改,不仅记录了数据更改的最终结果,还记录了实现这些更改的具体操作。而 Undo log 记录的是事务执行前的内容,即事务所做的修改前的状态。

如有问题,欢迎微信搜索【码上遇见你】。

免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

相关推荐
万少1 小时前
小龙虾(openclaw),轻松玩转自动发帖
前端·人工智能·后端
Jagger_2 小时前
AI 洪水淹到脖子了:剩下的是什么?我们该往哪儿跑?
后端
Victor3564 小时前
MongoDB(28)什么是地理空间索引?
后端
Victor3564 小时前
MongoDB(29)如何创建索引?
后端
皮皮林5514 小时前
面试官:什么是 fail-fast?什么是 fail-safe?
后端
陈随易5 小时前
前端大咖mizchi不满Rust、TypeScript却爱上MoonBit
前端·后端·程序员
雨中飘荡的记忆7 小时前
Multi-Agent + Skills + Spring AI 构建自主决策智能体
后端·spring
我叫黑大帅7 小时前
Go 语言并发编程的 “工具箱”
后端·面试·go
用户8356290780518 小时前
Python 实现 PowerPoint 形状动画设置
后端·python