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

【MySQL 三大日志深度解析】:redo log、undo log、binlog 作用与两阶段提交原理

你好我是fengxin_rou这是我的个人主页fengxin_rou的主页❄️欢迎查看我的专栏我的专栏《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》前言MYSQL已经学习过了事务和锁今天就来讲一讲日志的相关知识主要讲解了mysql的三大日志以及其对应的作用并且探究了mysql是如何做到数据持久化遇到mysql重启时数据丢失怎么恢复mysql在提交事务时redolog和binlog的两阶段提交原理一、MySQL 三大日志核心作用MySQL 有三种最核心的日志1. redo log重做日志作用是InnoDB的引擎层生成的日志保证事务持久性用于掉电等故障恢复属于 InnoDB 引擎层日志记录物理日志某个数据页被修改了什么固定大小、循环写核心价值事务提交不用立即刷盘MySQL 重启后能把已提交事务 “重做” 回来2. undo log回滚日志作用是InnoDB的引擎层生成的日志保证事务原子性事务回滚支撑 MVCC记录逻辑日志数据修改前的样子用于事务回滚、多版本并发控制不参与崩溃恢复负责 “可回滚、可快照”3. binlog归档日志作用是一种二进制日志文件是Servicer层日志数据归档、主从复制、时间点恢复属于 MySQL Server 层日志记录逻辑变更SQL 或行变化追加写、可无限扩容支撑主从同步、增量备份、数据回档二、redo log 为什么能保证崩溃恢复WAL 机制1. 什么是 WALWAL Write-Ahead Logging预写日志核心思想先写日志再写磁盘。如果每次事务提交都直接刷数据页随机 I/O 极慢高并发下数据库直接卡死WAL 做法事务修改内存页Buffer Pool写入 redo log buffer事务提交时只需要把 redo log 刷入磁盘数据页慢慢后台刷盘即可只要 redo log 落盘成功数据就永久安全。2. redo log 崩溃恢复流程MySQL 运行中宕机内存数据丢失重启后 InnoDB 扫描 redo log把已提交但未刷盘的数据重新 “重做” 到数据页数据库恢复到崩溃前一致状态这就是 redo log 最核心的价值保证事务持久性 大幅提升写入性能。3.Redo log的顺序写入redo log采用追加写入的方式将redo日志记录追加到文件末尾而不是随机写入。这样可以减少磁盘的随机I/O操作提高写入性能因为redo log是一个环形大小的缓冲区那么在末尾时会从头开始写覆盖已经刷盘、不再需要的旧记录(循环写)4.Checkpoint机制因为数据库会定期将内存中的数据刷新到磁盘此时就会将最新的LSN(log sequence number)写入磁盘LSN标志了当前redo log刷新磁盘的操作到哪一个位置了。这个 LSN 表示此 LSN 之前的数据都已经安全落盘。所以总体流程就是数据页 MySQL 真实落在磁盘上的数据文件.ibd崩溃前磁盘数据页的 LSN 一定 ≤ redo log 的 LSN恢复时从「较小的那个 LSN数据页 LSN」开始重做 redo log 里更大、更新的部分最终把内存没来得及刷盘的数据重新补写到磁盘数据页里三、binlog 是什么statement /row/mixed 区别binlog 是 MySQLServer 层的逻辑日志Server层每进行一次数据操作就会生成一条binlog等事务结束后统一把所有binlog写入binlog文件并且binlog不会记录select语句只会记录修改表结构和数据的语句binlog是追加写一个文件写满后再新建一个文件继续写。1. binlog 三大格式对比1STATEMENT 模式又称逻辑日志每进行执行一条sql语句就记录SQL 语句原文主从复制中 slave 端再根据 SQL 语句重现优点日志小、性能好缺点有动态函数问题如uuid、now这样随时在变函数会导致主从节点不一致MySQL 5.7.7 之后将默认格式改为 ROW 的主要原因。2ROW 模式企业推荐MySQL 5.7.7 及之后的默认格式记录行的修改前后数据一条update语句修改了多少行数据就记录多少行优点主从完全一致、安全、可精准恢复不会有动态函数问题缺点日志体积稍大现在互联网公司默认使用 ROW3MIXED 模式混合 STATEMENT 和 ROW简单 SQL 用 STATEMENT不安全 SQL 自动切 ROW折中方案逐步被 ROW 取代结论生产环境直接用 ROW 格式。四、redo log 和 binlog 的核心区别对比项redo logbinlog所属层级InnoDB 引擎层MySQL Server 层日志类型物理日志数据页修改逻辑日志SQL / 行变化写入方式循环写固定大小追加写无限文件主要作用崩溃恢复主从复制、数据备份事务保证保证 ACID 持久性不保证事务只记录变更生成时机事务执行中持续写事务提交时一次性写一句话记忆redo 管崩溃bin 管复制。五、事务提交redo log binlog 两阶段提交原理1. 为什么需要两阶段提交如果没有两阶段提交redo 写成功、binlog 没写 → 主库恢复了数据从库没有binlog 写成功、redo 没写 → 从库有数据主库没有 最终导致主从数据不一致。两阶段提交就是为了让 redo log 与 binlog 逻辑完全一致。2. 两阶段提交完整流程阶段 1prepare 准备阶段InnoDB 将 redo log 写盘标记事务为prepare 状态未最终提交阶段 2写入 binlog执行器写 binlog刷盘成功才算事务真正成功阶段 3commit 提交阶段InnoDB 将 redo log 标记为commit 状态事务完成3. 崩溃恢复怎么判断prepare 阶段将 XID内部 XA 事务的 ID 写入到 redo log同时将 redo log 对应的事务状态设置为 prepare然后将 redo log 持久化到磁盘innodb_flush_log_at_trx_commit 1 的作用commit 阶段把 XID 写入到 binlog然后将 binlog 持久化到磁盘sync_binlog 1 的作用接着调用引擎的提交事务接口将 redo log 状态设置为 commit此时该状态并不需要持久化到磁盘只需要 write 到文件系统的 page cache 中就够了因为只要 binlog 写磁盘成功就算 redo log 的状态还是 prepare 也没有关系一样会被认为事务已经执行成功prepare阶段是XID写入redo log, commit阶段是XID写入binlog如果 binlog 中没有当前内部 XA 事务的 XID说明 redolog 完成刷盘但是 binlog 还没有刷盘则回滚事务。对应时刻 A 崩溃恢复的情况。如果 binlog 中有当前内部 XA 事务的 XID说明 redolog 和 binlog 都已经完成了刷盘则提交事务。对应时刻 B 崩溃恢复的情况。如果 binlog 已写入 redo 是 commit (时刻B后)→ 提交如果 binlog 已写入 redo 是 prepare (时刻B前)→ 提交如果 binlog 未写入(时刻A) → 回滚即只要 binlog 已经写入了该事务的 XID事务 ID恢复时就一定会把事务提交不管此时 redo log 是prepare还是commit状态。两阶段提交 MySQL 分布式事务的基石。六、UndoLog日志的作用是什么undo log是用于回滚的日志在一个事务中记录sql语句执行前的数据在失败之后就做sql语句的反操作来回退在插入一条记录时要把这条记录的主键值记下来这样之后回滚时只需要把这个主键值对应的记录删掉就好了在删除一条记录时要把这条记录中的内容都记下来这样之后回滚时再把由这些内容组成的记录插入到表中就好了在更新一条记录时要把被更新的列的旧值记下来这样之后回滚时再把这些列更新为旧值就好了。

相关文章:

【MySQL 三大日志深度解析】:redo log、undo log、binlog 作用与两阶段提交原理

🔥你好我是fengxin_rou这是我的个人主页fengxin_rou的主页 ❄️欢迎查看我的专栏我的专栏 《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》 前言…...

用wireshark抓取分析EtherCAT报文

📜 第1章:EtherCAT报文结构 EtherCAT报文结构及Wireshark对应显示: 以太网帧头:14字节,包含目标/源MAC地址,帧类型 (EtherType) 固定为 0x88A4。EtherCAT帧头:2字节,包含一个11位的“…...

AI技术的未来发展方向

AI技术的未来发展方向AI技术的未来发展将围绕以下几个关键领域展开,这些方向不仅推动技术进步,也深刻影响社会和经济结构。通用人工智能(AGI)的探索AGI旨在实现与人类智能相当的通用性,能够跨领域学习和推理。当前研究…...

Python运算符:逻辑运算符(and/or/not)的短路特性

Python运算符:逻辑运算符(and/or/not)的短路特性📚 本章学习目标:深入理解逻辑运算符(and/or/not)的短路特性的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与…...

通用人工智能(AGI)完整技术方案:以字序生命模型(WOLM)为认知内核的双脑协同架构

一、AGI的终极定义在讨论技术方案之前,先定义什么是AGI。当前主流的AGI定义,强调一个系统能在绝大多数人类能做的智力任务上达到或超越人类水平。这个定义隐含了一个假设:AGI的核心是“智力”——逻辑推理、知识储备、创造力。我们的定义不同…...

python文化旅游服务系统 小程序系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能技术栈项目亮点应用场景项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->->进我个人主页-->获取博主联系方式同行可拿货,招校园代理 ,本人源头供货商 项目概述 Python文化旅游服…...

Logback 日志框架使用与配置指南

1. Logback 核心概念与架构 Logback 是 Java 生态中最主流的日志框架之一,其配置体系主要围绕以下三个核心概念展开: Logger(日志记录器):负责捕获日志事件。它通过 name 属性(通常是包名或类名&#xff09…...

论软件系统建模方法及其应用——以飞秒激光加工控制系统为例

摘要 2024年1月,我参与了某精密制造企业“高精度飞秒激光加工控制系统”项目的研发,担任系统架构设计师,主要负责系统建模、核心模块设计与集成测试。该项目旨在开发一套用于航空叶片微孔加工的数控系统,要求实现1μm的定位精度、实时补偿与工艺自适应调整。系统具有强实时…...

视频拖动进度条时如果落在GOP内,是怎么定位的?

视频拖动进度条时的 GOP 定位行为说明 0. 名词解释:Seek 是什么? Seek(寻址/定位)来自英文 “seek”(寻找、定位),在视频/音频领域特指将播放位置跳转到指定时间点的操作。 用户拖动进度条、点击…...

DataStore vs SharedPreferences 迁移指南:告别 ANR,拥抱类型安全

DataStore vs SharedPreferences 迁移指南:告别 ANR,拥抱类型安全 一句话收益:掌握从 SharedPreferences 迁移到 Jetpack DataStore 的完整路径,彻底消除主线程 I/O 阻塞与类型安全隐患。 适用版本:Android API 21&…...

深入理解 MCP 协议:原理、架构与实战开发指南

前言 2024年底 Anthropic 发布了 MCP(Model Context Protocol),短短几个月内 GitHub 星标突破 8 万。这个协议解决了一个核心问题:如何让大模型标准化地连接外部工具和数据源。 本文将从协议设计原理出发,手把手带你实…...

【RT-DETR实战】064、NMS后处理优化与替代方案:我在RT-DETR里踩过的那些坑

今天调一个RT-DETR的部署问题,模型推理速度明明达标了,但在实际视频流里跟踪目标时总出现“闪跳”——同一个目标在相邻帧里忽左忽右。 盯着输出看了半天,发现是相邻帧的检测框置信度相差0.01,NMS直接就把低分框干掉了,导致目标位置在帧间不连续。这个经典问题让我决定好…...

从0到就业,学习网络安全的正确顺序

从0到就业,学习网络安全的正确顺序 想入行网络安全,别怕,这条路虽然看起来复杂,但只要找对方法,就能少走很多弯路。核心原则就是:先学基础,再学安全,动手永远比光看重要 一、入门基…...

汽车零部件品牌升级方法拆解:复杂B2B能力如何被客户看懂

从B2B表达方法看,汽车零部件品牌升级可以理解为一个“客户判断结构化”的问题。企业不是简单输出自我介绍,而是要把技术能力、项目经验、质量体系、协同机制与证据材料,转化为客户不同角色都能使用的判断信息。很多汽车零部件企业已经完成了实…...

河北邯郸职称评审的方式有哪几种?

1、以考代评以考代评就是指有些专业技术岗位可以通过参加考试而不是递交繁琐的材料来获得专业技术职务资格。只要顺利通过国家指定的科目考试,你就可以获得专业技术资格,省去了各种审核流程的烦恼。2、只评不考只评不考是目前zui常见、适用范围zui广的一…...

实时反欺诈Agent部署失败率高达68%?金融IT总监亲述4类典型故障链及容灾切换黄金12分钟法则

更多请点击: https://codechina.net 第一章:实时反欺诈Agent部署失败率高达68%?金融IT总监亲述4类典型故障链及容灾切换黄金12分钟法则 某头部城商行在2023年Q3上线新一代实时反欺诈Agent集群后,监控平台显示首次部署成功率仅32…...

四川资产盘活实战教培|从业者真实学习感悟

深耕资管行业多年,我发现四川不少企业长期受不良债权积压、存量资产沉淀困扰。自主催收效率低、回款周期长,再加上缺乏专业尽调、估值及司法处置能力,极易造成资产贬值、合规风险增加。在此背景下,本土实战型资产盘活教培&#xf…...

基于GIS三维地球的全球指挥官推演沙盘软件军迷免费版 谷歌地球 数字孪生 自媒体创作 战术想定编辑

一套完全自主的、基于真实地理坐标系的沉浸式战术推演引擎,其技术栈的构建是对传统可视化与交互范式的系统性革新。 全球指挥官沙盘软件军迷免费版下载 一、 项目概述:一个核心命题与两项技术挑战 本项目源于一个明确的工程命题:构建一个允…...

私有化 IM vs 公有云 IM:3 个维度告诉你该怎么选

企业在选择即时通讯工具时,常常陷入 “功能越多越好” 的误区。实际上,IM 选型的本质是一次数据治理策略的决策。私有化 IM 和公有云 IM 没有绝对的好坏,只有适合不适合。今天我们从三个核心维度,帮你做出正确的选择。第一个维度&…...

三亚高端小区实景落地选哪家

在三亚,高端小区对居住品质的要求近乎苛刻——不仅要有气派的视觉呈现,更要经得起台风、高湿、海风盐雾的考验。如果您正在寻找一家能真正实现“所见即所得”的实景落地服务商,三亚秦鼎科技有限公司就是您不容错过的选择。为什么是秦鼎科技&a…...

巨噬细胞M1型与M2型的差异

巨噬细胞具有高度的功能可塑性,依据微环境信号的不同,可极化为功能迥异的M1型(经典活化)与M2型(替代活化)两大表型。两者在活化机制、代谢特征及生物学功能上呈现出显著的“阴阳”对立与平衡。1. 活化诱导与…...

GitHub Copilot X:AI编程助手如何重塑开发工作流与效率

1. 项目概述:当代码编辑器遇见“副驾驶”如果你和我一样,每天有超过一半的时间是在代码编辑器里度过的,那你一定对“效率”这个词有着近乎偏执的追求。从语法高亮、代码补全,到后来的LSP(Language Server Protocol&…...

GitHub Copilot X:从代码补全到全流程AI协作者的实战指南

1. 项目概述:当代码编辑器遇见“副驾驶”如果你和我一样,每天有超过一半的时间是在代码编辑器里度过的,那你一定对“效率”这个词有着近乎偏执的追求。从语法高亮、代码补全,到后来的LSP(Language Server Protocol&…...

CPU核心存储架构:寄存器文件与SRAM的设计原理与应用对比

1. 项目概述:从“存储”到“访问”的核心差异在处理器设计的核心地带,有两个名字听起来很像、功能也似乎都是“存东西”的组件,却常常让刚入行的朋友感到困惑:Register File(寄存器文件)和 SRAM&#xff08…...

寄存器文件与SRAM:芯片设计中存储层次的核心差异与选型指南

1. 项目概述:从“存储”到“访问”的鸿沟在数字电路和处理器设计的核心地带,有两个名字经常被提及,却又常常让初学者甚至一些从业者感到混淆:Register File(寄存器文件)和SRAM(静态随机存取存储…...

基于RL78/G13的电位器ADC采集与串口通信上位机显示系统设计

1. 项目概述与核心思路最近在整理工作室的旧零件,翻出来一块瑞萨电子的RL78/G13开发板,还有几个吃灰的电位器。想着不能浪费,就琢磨着做个简单但能体现MCU基本功的小项目:用这块开发板实时采集电位器的电压,并把数据上…...

用 n8n 搭建自己的自动化工作流平台

用 n8n 搭建自己的自动化工作流平台分类:开源项目部署n8n 适合Webhook、邮件通知、表单处理和 API 自动化。这类主题真正跑起来并不难,难的是上线后稳定、可备份、能排错。本文按实操方式整理一套可以直接落地的流程,默认你已经会登录 Linux …...

基于瑞萨R8C MCU的180度电角度无感FOC BLDC电机控制方案详解

1. 项目概述与核心需求解析大家好,我是老王,一个在电机控制和嵌入式系统开发领域摸爬滚打了十几年的工程师。今天想和大家深入聊聊一个非常具体且有意思的项目:如何基于瑞萨电子的R8C系列MCU,来实现一套180度电角度控制的无刷直流…...

电动工具MCU选型与开发:从FOC算法到高集成度设计的工程实践

1. 项目概述:为什么电动工具需要一颗“聪明”的MCU?大家好,我是覃杰,在瑞萨电子上海分公司负责MCU相关的技术方案支持。今天我们不聊那些高大上的概念,就从一个工程师最熟悉的场景聊起:你手里那把正在“嗡嗡…...

AI赋能·精准适配——API风险监测系统筑牢教育数据流转安全防线

一、概要提示:本文围绕数据流转安全与静态数据安全的核心差异,结合教育行业数字化转型特性,系统阐述API风险监测系统的核心逻辑、核心能力、常见疑问及发展趋势,全面呈现系统在教育场景中的数据化应用成效,凸显“AI赋能…...