binlog、redolog和undolog三者有何区别?

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: MySQL中的binlog、redo log和undo log是日志文件,各有特定作用。binlog用于数据备份、恢复和复制,适用于所有存储引擎。redo log记录事务修改,用于崩溃恢复和数据持久性,仅InnoDB存储引擎支持。undo log保存事务修改前的状态,用于事务回滚和MVCC,也仅InnoDB支持。它们在功能和记录内容上有明显区别,有助于事务管理和数据库一致性。

在 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 记录的是事务执行前的内容,即事务所做的修改前的状态。


转载来源:https://juejin.cn/post/7378363694940192778

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL 关系型数据库
binlog,undolog,redolog
binlog,undolog,redolog
153 3
|
1月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
151 9
|
4月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
211 23
|
9月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
203 6
|
6月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
837 0
|
9月前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
10月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
273 2
|
存储 关系型数据库 MySQL
binlog、redolog、undo log底层原理及ACID特性实现分享
在数据库管理系统中,日志机制是确保数据一致性、完整性和可靠性的关键组件。MySQL数据库中的binlog、redolog和undolog作为其核心日志系统,各自扮演着不同但同样重要的角色。本文将深入探讨这三种日志的底层原理以及它们如何分别实现ACID(原子性、一致性、隔离性、持久性)特性的不同方面。
281 0
|
11天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
44 6
|
2月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
117 10