彻底讲透:MySQL中的三种日志(Undo Log、Redo Log和Binlog)
Undo Log: 用于事务回滚。在MySQL InnoDB存储引擎中,Undo Log是预写式日志(redo log是后写式日志),用于在执行事务回滚时撤销事务对数据页的修改。
Redo Log: 用于crash-safe能力。保证了在数据库发生崩溃的情况下,通过redo log重新执行已经提交的事务,从而保证数据的完整性。
Binlog: 是MySQL Server层的日志,不是InnoDB的日志。记录了所有影响数据库数据变更的语句,用于复制和数据恢复。
简单示例:
-- 假设我们有一个Undo Log条目,记录了事务在修改数据前的状态
-- 事务开始,修改数据,生成Redo Log
-- 事务提交,Redo Log持久化存储
-- 数据库崩溃,可以通过Redo Log恢复未持久化的已提交事务
-- 假设我们有一个Binlog条目,记录了事务对数据所做的变更
-- 事务执行,变更被记录到Binlog
-- Binlog可用于数据同步、数据恢复等场景
注意:这些日志是MySQL底层存储引擎维护的,用户一般不直接与之交互。
评论已关闭