• 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. 事务提交
      在这里插入图片描述
  • 相关阅读:
    判断DataFrame中是否存在具有相同内容的行将具有相同内容的行进行标记和处理
    面对千行百业数字生产力,华为智能云网解决方案再升级
    【毕业设计】单片机远程wifi红外无接触体温测量系统 - 物联网 stm32
    【设计模式】装饰者模式:以造梦西游的例子讲解一下装饰者模式,这也是你的童年吗?
    [UEFI] Hob
    Linux中查看并删除端口
    Java开发学习(四十三)----MyBatisPlus查询语句之查询投影
    GaussDB数据库管理系统介绍
    【机器学习笔记】【数据预处理】
    【华为OD机试真题 JAVA】贪吃蛇
  • 原文地址:https://blog.csdn.net/u013400314/article/details/132813797