• 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. 事务提交
      在这里插入图片描述
  • 相关阅读:
    SpringBoot+Mybaits搭建通用管理系统实例三:数据库处理Dao层功能实现
    这一年我们上线的运维自动化系统
    使用aliyun的registry上传下载镜像
    iOS 用masonry布局Scrollview的问题,添加在scrollview的子控件约束失效
    使用日志上下文聚合插件使能上下文查询及 Livetail
    JS面向对象的几种设计模式
    HarmonyOS应用开发学习历程(1)初识DevEco Studio
    数据库管理工具:如何使用 Navicat for MySQL 导出导入数据表 Excel 文件?
    数学基础之最大似然准则
    【Java SE】数组常见问题及技巧用法
  • 原文地址:https://blog.csdn.net/u013400314/article/details/132813797