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贝塔】进行体验,无限使用。

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

相关推荐
发现一只大呆瓜3 小时前
SSO单点登录:从同域到跨域实战
前端·javascript·面试
发现一只大呆瓜3 小时前
告别登录中断:前端双 Token无感刷新
前端·javascript·面试
qiuyuyiyang4 小时前
【MySQL】环境变量配置
数据库·mysql·adb
哈里谢顿4 小时前
0316momenta一面
面试
无限大64 小时前
《AI观,观AI》:善用AI赋能|让AI成为你深耕核心、推进重心的“最强助手”
前端·后端
uzong4 小时前
CoPaw是什么?-- 2026年开源的国产个人AI助手
人工智能·后端
无心水5 小时前
【任务调度:框架】11、分布式任务调度进阶:高可用、幂等性、性能优化三板斧
人工智能·分布式·后端·性能优化·架构·2025博客之星·分布式调度框架
pjw198809035 小时前
Spring Framework 中文官方文档
java·后端·spring
神仙别闹5 小时前
基于NodeJS+Vue+MySQL实现一个在线编程笔试平台
前端·vue.js·mysql
盒马盒马5 小时前
Rust:迭代器
开发语言·后端·rust