• Home
  • 写文
  • 关于
    • jlweb Blog photo

      jlweb Blog

      occupied with moon theme of jelly

    • 详情
    • Github
    • Steam
  • 文章
    • 所有文章
    • 所有标签
  • 项目
  • 主站
search clear

Mysql速记

10 Dec 2023

阅读时长 ~1 分钟

编辑

1.redo log 和undo log

重做日志(Redo Log):

  • 作用:重做日志记录了对数据库所做的所有修改操作,例如插入、更新或删除等。它确保了事务的持久性(Durability)特性,即使系统崩溃或停电,也能够通过重做日志重新执行已提交的事务,以将已提交的更改重新应用到数据库,从而保持数据库的一致性。
  • 实现方式:重做日志通常包含物理日志记录,记录的是数据页面上的实际更改,而不是逻辑修改。它在事务提交时写入,并在事务持久化到磁盘之前就已完成写入。重做日志是循环写入的,当记录到一定程度后会进行重复利用。

回滚日志(Undo Log):

  • 作用:回滚日志记录了事务执行过程中所做的修改操作的逆操作(即撤销操作),用于支持事务的原子性(Atomicity)和一致性(Consistency)。当事务需要回滚时,回滚日志中的信息可以用来撤销已提交事务的更改,将数据库状态恢复到事务开始之前的状态。
  • 实现方式:回滚日志通常记录了事务所做的修改的反向操作,例如,如果一个事务对某行记录进行了更新,那么回滚日志就会记录这个更新前的值,以便在回滚时可以恢复为原来的值。

    2.ACID如何保证

    原子性:通过undolog来实现。 持久性:通过binlog、redolog来实现。 隔离性:通过(读写锁+MVCC)来实现。 一致性:MySQL通过原子性、持久性、隔离性最终实现数据一致性。 对MySQL来说,逻辑备份日志(binlog)、重做日志(redolog)、回滚日志(undolog)、锁技术 + MVCC就是MySQL实现事务的基础。



🥁-DB Share Tweet +1