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

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

相关推荐
lkbhua莱克瓦241 小时前
深入理解HTTP协议:从理论到SpringBoot实践
网络·笔记·后端·网络协议·http·javaweb
古城小栈1 小时前
Rust复合类型 四大军阀:数、元、切、串
开发语言·后端·rust
Marshmallowc1 小时前
React 合成事件失效?深度解析 stopPropagation 阻止冒泡无效的原因与 React 17+ 事件委派机制
前端·javascript·react.js·面试·合成事件
阿杰 AJie3 小时前
MySQL 聚合函数
android·数据库·mysql
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue酒店预订系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
JavaGuide3 小时前
IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!
java·后端·mysql·springboot·idea·大厂面试·javaguide
a程序小傲3 小时前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
达梦产品与服务3 小时前
SQLark 实战 | 如何快速导入数据至达梦、Oracle、MySQL、PG 数据库
mysql·oracle·达梦数据库·数据导入·pg数据库
liux35283 小时前
MySQL集群架构:MySQL InnoDB Cluster (MIC)详解(十一)
数据库·mysql·架构
小北方城市网4 小时前
MySQL 索引优化实战:从慢查询到高性能
数据库·spring boot·后端·mysql·rabbitmq·mybatis·java-rabbitmq