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

MySQL的更新语句执行过程涉及了哪些文件的写入,衍生了redo、undo、二进制日志在什么时候进行写入

问题

MySQL的更新语句执行过程涉及了哪些文件的写入,衍生了redo、undo、二进制日志在什么时候进行写入

我的回答

MySQL执行更新语句时,为了保证数据的一致性和持久性,会涉及多个日志文件的写入。主要包括undo日志、redo日志和二进制日志(binlog)。

首先,当事务开始执行更新操作时,MySQL会先将修改前的数据记录到undo日志中。这个过程发生在实际数据被修改之前,目的是支持事务回滚和MVCC(多版本并发控制)。

接着,MySQL会在内存的Buffer Pool中更新数据,同时将对应的修改操作记录到redo日志缓冲区。这时数据变更还只在内存中。

当事务提交时,会经历以下步骤:

  • 首先,redo日志会从缓冲区刷新到磁盘上的redo日志文件,这一步确保了即使系统崩溃,已提交的事务也能通过redo日志恢复。这是WAL(Write-Ahead Logging)机制的体现。
  • 然后,MySQL会将事务的修改操作以事件的形式写入binlog(二进制日志)。binlog的写入是在事务提交阶段进行的,它记录了数据的逻辑变更,主要用于主从复制和数据恢复。
  • 最后,MySQL会在内存中标记事务为已提交状态。

值得注意的是,Buffer Pool中修改的数据页(脏页)并不会立即写回磁盘,而是由后台线程异步刷新或在特定条件下(如Buffer Pool空间不足)才会写回,这就是所谓的"延迟写入"策略。

这整个过程体现了MySQL的"双1"安全策略:即sync_binlog=1和innodb_flush_log_at_trx_commit=1时,每次事务提交都会确保redo日志和binlog被刷新到磁盘,从而保证数据的持久性和一致性。

http://www.dtcms.com/a/348407.html

相关文章:

  • 从 JUnit 深入理解 Java 注解与反射机制
  • HarmonyOS NEXT系列之元服务框架ASCF
  • 波兰密码破译机bomba:二战密码战的隐形功臣
  • 深入OpenHarmony OTA硬核升级
  • ComfyUI ZLUDA AMD conda 使用遇到的问题
  • stm32温控大棚测控系统(CO2+温湿度+光照)+仿真
  • Docker 容器(一)
  • 【ansible】5.在受管主机部署文件和Jinja2模板
  • 信誉代币的发行和管理机制是怎样的?
  • 基于角色的访问控制(RBAC)研究与Go语言实现
  • overleaf关于给参考文献添加DOI链接的问题
  • B站视频字幕提取工具
  • 当GitHub“断网”:从应急到终极方案,手把手搭建永不宕机的代码协作体系
  • 鸿蒙 ArkTS 开发:Number、Boolean、String 三种核心基本数据类型详解(附实战案例)
  • 从 Unity UGUI 到 Unreal UMG 的无缝迁移:UMG 基础与 UI 控件布局
  • Java的数字计算
  • pycharm的matplotlib不显示动图问题的解决
  • Python核心技术开发指南(004)——配置PyCharm
  • Flink直接缓冲存储器异常解析与解决方案
  • 力扣155.最小栈
  • 嵌入式知识篇---32GUI
  • 神经网络|(十四)概率论基础知识-协方差和方差
  • 使用 Golang 的 Gin 框架实现一周极限编程计划:全网 AIGC 项目热点追踪应用
  • 自然语言处理——06 迁移学习(下)
  • 自然语言处理——06 迁移学习(中)
  • RockyLinux9.6安装k8s
  • 【(含模板)滑动窗口 - LeetCode】3. 无重复字符的最长子串
  • 从“小麻烦”到“大难题”:Spring Boot 配置文件的坑与解
  • UE5游戏开发的理想硬件配置指南:从入门到专业级方案
  • MySQL视图有什么用?一文读懂虚拟表的六大核心价值