MySql redoLog、undoLog和binLog

Redo Log(重做日志) 

  1. 是什么:

    • Redo Log是一组物理日志文件,用于记录在数据库引擎执行事务期间对数据所做的所有更改。它保证了在数据库发生崩溃时,已提交的事务的更改能够被重新应用,从而保持数据库的一致性。
  2. 何时写入:

    • Redo Log在事务提交时被写入。它记录了事务对数据页所做的修改,而不是记录已修改的数据本身。
    • 在事务提交时,Redo Log被写入。实际上,Redo Log的写入分两个阶段进行。首先,将Redo Log缓冲池的内容刷新到磁盘的临时文件(checkpoint),然后再将checkpoint的内容写入到真正的Redo Log文件。
    • Redo Log是一个循环写入的日志文件,当写满时,会重新从头开始写。这样设计的目的是为了避免日志文件无限增长,同时也可以通过周期性地执行checkpoint来清理不再需要的Redo Log记录。
  3. 使用场景:

    • 主要用于崩溃恢复。当数据库发生崩溃时,通过Redo Log可以重放已提交事务的操作,将数据库恢复到一致的状态。

Undo Log(撤销日志):

  1. 是什么:

    • Undo Log是一种逻辑日志,用于记录事务对数据所做的修改。与Redo Log不同,Undo Log记录的是事务的反操作,即撤销事务对数据的修改。
  2. 何时写入:

    • Undo Log在事务执行修改时写入。当事务提交时,Undo Log中的记录不再需要,可以被删除。
  3. 使用场景:

    • 主要用于实现事务的隔离性和提供一致性读。在事务执行过程中,如果需要回滚,可以使用Undo Log还原到事务开始之前的状态。
  4. 回滚操作:

    • 如果事务在执行过程中发生错误,或者用户显式执行了ROLLBACK语句,系统可以使用Undo Log来回滚事务所做的修改。

总体而言,Redo Log用于崩溃恢复,保证数据库的持久性,而Undo Log用于支持事务的隔离性和回滚操作。在事务执行时,数据库引擎将相应的修改记录同时写入Redo Log和Undo Log,以确保在各种情况下都能够保持事务的一致性和可靠性。

BinLog(二进制日志

  1. 是什么:

    • Binlog是MySQL中的二进制日志,它记录了数据库中的所有更改,包括对数据的修改、插入和删除等。
  2. 何时写入:

    • Binlog在事务提交时被写入。与Redo Log不同,Binlog记录的是逻辑日志,包含了对数据的实际修改操作,而不是物理存储的修改。
  3. 使用场景:

    • 主要用于实现主从复制、数据恢复和增量备份等场景。通过解析Binlog,可以还原数据库的操作历史,实现数据的复制和恢复。
  4. 主从复制详解:

    • 在主从复制中,主数据库将自己的Binlog发送给从数据库,从数据库通过解析Binlog执行相同的修改操作,从而保持主从数据的一致性。
  5. 数据恢复和备份:

    • Binlog记录了数据库的历史更改,可以通过回放Binlog来还原数据库到某个时间点的状态,实现数据的恢复。此外,结合基于时间点的恢复和全量备份,可以实现增量备份。
  6. 格式和内容:

    • Binlog的格式包括Statement-Based Logging(基于语句的日志)和Row-Based Logging(基于行的日志)。不同的格式影响了Binlog中记录的内容,以及在主从复制中的应用方式。

总体而言,Binlog是MySQL的关键组件之一,通过记录逻辑日志,它为数据库提供了复制、数据恢复和备份等功能。 Binlog与Redo Log和Undo Log一同构成了MySQL的日志系统,共同保证了数据库的可靠性和灾难恢复能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值