• 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. 事务提交
      在这里插入图片描述
  • 相关阅读:
    零基础学习HTML5
    C语言学习概览(二)
    医学影像存储与传输系统(PACS)源码
    C#使用环境类获取和打印命令行参数
    Ab3d.PowerToys and Ab3d.DXEngine Crack
    easyswoole学习记录
    python中的小tips
    LeetCode 0667. 优美的排列 II - 思维 + 构造
    美国海运专线有哪些港口?美国海运专线有哪些路线?
    【【萌新的FPGA学习之快速回顾 水 水 】】
  • 原文地址:https://blog.csdn.net/u013400314/article/details/132813797