当前位置: 首页 > news >正文

undo log、redo log和bin log详解

1. Redo Log(重做日志)

  • 作用:主要用于崩溃恢复,确保事务的持久性(Durability)。当数据库异常重启时,通过重放redo log将未刷盘的脏页恢复到最新状态。
  • 物理/逻辑:记录的是物理日志,描述数据页的具体修改(例如页号、偏移量等)。
  • 写入方式:顺序写入,采用循环覆盖模式(固定空间,写满后覆盖旧日志)。
  • 写入时机
    • 事务执行过程中,修改操作会先写入内存的redo log buffer。
    • 提交事务时强制刷盘(innodb_flush_log_at_trx_commit=1时)。
    • 其他情况如buffer占用过半或后台线程定期刷盘。
  • 其他特性
    • 与undo log关联:undo log的修改也会生成redo log,确保undo log的持久性。
    • 两阶段提交:事务提交时,redo log先标记为prepare状态,binlog写入后再标记为commit。

2. Undo Log(撤销日志)

  • 作用:主要用于事务回滚和 MVCC(多版本并发控制) ,实现原子性(Atomicity)。记录事务修改前的数据状态,用于逆向操作。
  • 物理/逻辑:属于逻辑日志,记录与操作相反的逻辑(如INSERT对应DELETE)。
  • 写入方式:随机读写,存储于回滚段(rollback segment)中。
  • 持久性保障:依赖redo log保护,undo log的修改会伴随redo log的生成。
  • 应用场景
    • 事务回滚时,根据undo log逆向恢复数据。
    • MVCC中提供历史版本数据,支持一致性读。

3. Bin Log(二进制日志)

  • 作用:用于数据归档主从复制时间点恢复。记录所有对数据库的修改操作(包括非事务引擎的操作)。
  • 物理/逻辑:属于逻辑日志,记录SQL语句或行变更的逻辑操作(如UPDATE语句)。
  • 写入方式:追加写入,保存全量日志,不会覆盖旧记录。
  • 写入时机:事务提交后一次性写入(sync_binlog参数控制刷盘策略)。
  • 与事务的关系
    • 所有存储引擎的修改均会记录。
    • 在两阶段提交中,binlog写入是事务提交的关键步骤,确保redo log与binlog的一致性。

三者的核心区别与联系

特性Redo LogUndo LogBin Log
作用崩溃恢复,持久性事务回滚,MVCC数据归档,主从复制
日志类型物理日志(页修改)逻辑日志(逆向操作)逻辑日志(SQL或行变更)
存储引擎InnoDB特有InnoDB特有MySQL Server层,所有引擎可用
写入方式循环写入随机读写追加写入
持久性依赖独立持久化依赖redo log保护独立持久化
事务提交阶段两阶段提交(prepare/commit)事务执行时生成事务提交后写入

相关文章:

  • Unity3D 对象实例化详解
  • 第二十三天 实践分布式软总线,实现两个设备之间的简单通信
  • 通过Nginx负载均衡+Keepalived实现业务高可用
  • Unity:使用DoTween实现按钮的缩放
  • Ubuntu 22.04 安装Nvidia驱动加速deepseek
  • 大模型RAG中的retrieve策略
  • AE 安装包 绿色版(Win,Mac)(2018-2025)合集
  • conda env remove与conda remove
  • RuoYi使用$.modal.closeTab方法关闭当前tab标签页刷新另外一个tab标签页
  • Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
  • 国漫工业化革命:AI如何让“一人团队”产出影视级动画?
  • Bend Labs弯曲传感器:柔性设计,多轴测量,高精度传感
  • 时间无关和时间相关的N-S方程
  • 凸函数和凹函数的定义怎么来的?
  • openssl的aes128_ECB加密解密运算实例
  • 【精】使用 Apktool 反编译 APK 并重新签名的详细教程
  • 工具MyBatis Generator(MBG)
  • 网页聊天室测试报告
  • ubuntu下r8125网卡重启丢失修复案例一则
  • 使用 Java 更新 Word 文档中的图表数据-超详细
  • 如何用wordpress做网站/外贸网站建设优化推广