MySQL的redo log,undo log,bin log都是干什么的

redo log是InnoDB引擎特有的,只记录该引擎中表的修改记录。binlog是MySQL的Server层实现的,会记录所有引擎对数据库的修改。

redo log是物理日志,记录的是在具体某个数据页上做了什么修改;binlog是逻辑日志,记录的是这个语句的原始逻辑。

redo log是循环写的,空间固定会用完;binlog是可以追加写入的,binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

以下是用户补充

1、redolog记录修改内容(哪一页发生了什么变化),写于事务开始前,用于数据未落磁盘,但数据库挂了后的数据恢复
2、binlog记录修改SQL,写于事务提交时,可用于读写分离
3、undolog记录修改前记录,用于回滚和多版本并发控制

发表评论

后才能评论

评论(5)

  • mpweixin用户 普通 2023-02-15 11:40 上午

    A原子性:靠undo log来保证(异常或执行失败后进行回滚)。
    D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通过redo log最终将数据保存至磁盘中)。
    I隔离性:事务间的读写靠MySQL的锁机制来保证隔离,事务间的写操作靠MVCC机制(快照读、当前读)来保证隔离性。
    C一致性:事务的最终目的,即需要数据库层面保证,又需要应用层面进行保证,并且MySQL底层通过两阶段提交事务保证了事务持久化时的一致性。

  • mpweixin用户 普通 2022-02-21 11:04 上午

    1、redolog记录修改内容(哪一页发生了什么变化),写于事务开始前,用于数据未落磁盘,但数据库挂了后的数据恢复
    2、binlog记录修改SQL,写于事务提交时,可用于读写分离
    3、undolog记录修改前记录,用于回滚和多版本并发控制

  • The Promise Keeper? 普通 2022-02-18 2:35 下午

    undo去哪了