Java常见技术分享-28-事务安全-事务日志-事务日志流程

前情提要

在简单认识了一下事务日志的框架之后, 我们需要做的是把整个流程窜起来, 先用个简单的例子。

案例 把id=1 的用户余额从100改成200
  • 当执行更新操作的时候, innodb 会先把数据从磁盘读到内存的缓冲池。
  • 先记录 undo log , 把 id =1 的用户余额 = 100 这个信息保存下来。
    • 这样一来, 如果后面事务出错需要回滚, 就能通过这里的记录进行恢复。
  • 接着引擎会在内存把这个账户的余额改成200 。
  • 接着 记录redo log , 内容 大概是 "ID =1 的用户 的余额 改成 200 这个操作"
    • 这样就算数据库突然崩溃, 内存里边的修改丢了, 重启后也能通过这个记录,重新执行一遍操作。
  • 最后在整个事务提交的时候, mysql 会把这次的修改记录到binlog 了。内容同样是"ID =1 的用户 的余额 改成 200 这个操作"
    • 服务器层面的日志,让从库知道 主库做了哪些修改
总结
  • 记 undo log 备份回滚
    • 管理范围 在 提交成功之前 ,崩溃了, 事务处于未提交的状态 出了问题 都回滚 就需要这个undo log
  • 再记 redo log 保证持久性
    • 管理范围 在提交成功之后 ,崩溃了, 事务处于已提交状态, 出了问题 就通过redo log 恢复数据
      • 需要注意的是 在 事务提交过程中 redo log buffered(redo log 不是每次操作都刷 而是先记录到内存的buffered 批量刷新) 就会被强制刷到 磁盘 如果 刷失败了 也算提交失败
  • 最后事务提交 记 binlog 供同步。

补充

  • MyISAM存储引擎 没有undo log 或者 redo log 所以他不支持事务

  • 存储引擎 可以理解为 Mysql的数据处理发动机,他负责怎么存储数据, 如何建立索引, 怎么处理事务。 设计成可插拔的存储引擎架构, 而不是自己一条龙昨晚, 主要是应对不同的业务需求。

相关推荐
代码山河9 分钟前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
老歌老听老掉牙12 分钟前
圆柱端面四平面交线及其在yoz面投影的几何解析与 Python 实现
开发语言·python·平面
旖旎夜光1 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
俩个逗号。。1 小时前
Kotlin flow 详解
android·开发语言·kotlin
Escalating_xu1 小时前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
程序猿乐锅2 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路2 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData2 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat3 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰3 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai