在MySQL数据库中,binlog、redolog和undolog都是日志类型文件,但它们各自的作用和实现方式有所不同。
binlog主要用来对数据库进行数据备份、崩溃恢复和数据复制等操作,redo log和undo log主要用于事务管理,记录的是数据修改操作和回滚操作。redolog用来做恢复,undolog用来做回滚。
崩溃恢复是指在数据库系统因为某种原因而发生崩溃或非正常关闭后,通过一系列机制和步骤来恢复数据库到一个一致性和可用的状态。崩溃恢复是数据库管理系统的重要功能,它确保数据库在出现异常情况后能够自动恢复,避免数据丢失或数据库状态不一致的问题。
在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(多版本并发控制)机制,用于在并发事务执行时提供一定的隔离性。
支持引擎 | 主要作用 | |
---|---|---|
binlog | innodb、myiasm、... | 数据备份、崩溃恢复、主从复制 |
redolog | innodb | 崩溃恢复 |
undolog | innodb | 事务回滚、MVCC |
很多人不知道该怎么记忆,参考咱们的读者@彭超 的建议,可以这么记忆: