• mysql redo 日志 、 undo 日志 、binlog


    事务四大特性 ACID 原子性 、一致性、隔离性、持久性

    事务的隔离性由锁机制实现
    事务的原子性、一致性、持久性由事务的redo 日志 和 undo 日志 保证
    **redo log **是事务持久性的保证
    undo log 是事务原子性的保证

    redo log 是存储引擎层(innodb)生成的日志,记录的是物理级别上的页修改操作,比如页号xxx、偏移量yyy 写入了zzz数据,主要保证数据的可靠性
    undo log 是存储引擎层(innodb)生成的日志,记录的是逻辑操作日志,比如对某一行数据进行了insert语句操作,那么undolog 就记录 一条与之相反的delete操作,主要用于 事务回滚(undo记录的是每个修改操作的逆操作)和一致性非锁定读(undo log 回滚行记录到某种特定的版本mvcc,即多版本并发控制)

    在这里插入图片描述

    在这里插入图片描述
    redo日志是顺序写入磁盘的
    在执行事务的过程执行一条语句,就可能产生若干条redo日志,这些日志是按照产生的顺序写入磁盘的,也就是使用顺序IO。
    Redo log可以简单分为以下两个部分:

    一是内存中重做日志缓冲 (redo log buffer),是易失的,在内存中
    二是重做日志文件 (redo log file),是持久的,保存在磁盘中
    在这里插入图片描述
    设置 查看 buffer 大小
    show variables like ‘innodb_log_buffer_size’;
    在这里插入图片描述
    刷盘策略

    查看参数 innodb_flush_log_at_trx_commit;
    show variables like ‘innodb_flush_log_at_trx_commit’;
    在这里插入图片描述
    在这里插入图片描述

    page cache
    在这里插入图片描述
    ** innodb 引擎 后台线程 **
    在这里插入图片描述

    在这里插入图片描述
    事务提交时必须调用一次 fsync 操作,最安全的配置,保障持久性
    在这里插入图片描述

    在这里插入图片描述
    事务提交时只做 write 操作,只保证将redo log buffer写到系统的页面缓存中,不进行fsync操作,因此如果MySQL数据库宕机时 不会丢失事务,但操作系统宕机则可能丢失事务
    在这里插入图片描述
    在这里插入图片描述

    Undo log

    在这里插入图片描述

    undo log 类型:
    在这里插入图片描述
    在这里插入图片描述
    undo 日志的作用
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    redo & undo总结

    redo log 是事务持久性的保证
    undo log 是事务原子性的保证
    在事务中 更新数据
    前置操作
    其实是要先写入一个 undo log
    undo log 会产生 redo log,也就是 undo log的产生会伴随着redo log 的产生,这是因为undo log也需要持久性的保护。
    实际上当进行数据修改时不光要记录到undo中,使用undo这个动作还要记录到redo中,同Oracle中相似,在使用undo回滚时也会产生一定量的信息记录redo,总之,不管不管innodb怎样使用undo 这个信息都是要记录redo的。

    下面是redo log + undo log的简化过程,便于理解两种日志的过程:

    假设有A、B两个数据,值分别为1,2.

    1. 事务开始
    2. 记录A=1到undo log
    3. 修改A=3
    4. 记录A=3到 redo log
    5. 记录B=2到 undo log
    6. 修改B=4
    7. 记录B=4到redo log
    8. 将redo log写入磁盘
    9. 事务提交
      在这里插入图片描述
  • 相关阅读:
    tcp checksum 0xffff instead of 0x0000 see rfc 1624
    JavaScript如何实现钟表效果,时分秒针指向当前时间,并显示当前年月日,及2024春节倒计时,源码奉上
    WebAssembly不是软件!它是计算机中的计算机
    GB28181学习(八)——历史视音频的回放
    换服还是掀桌?哪条才是程序员的出路?
    Maixll-Dock 使用方法
    【datawhale202207】强化学习:策略梯度和近端策略优化
    深入理解mmap--内核代码分析及驱动demo示例
    Java版本+企业电子招投标系统源代码+支持二开+招投标系统+中小型企业采购供应商招投标平台
    机械原理复习试题及答案
  • 原文地址:https://blog.csdn.net/u013400314/article/details/132813797