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

Mysql--基础知识点--102--redo log内容

下面以InnoDB 存储引擎的 redo log 为例,给出一个典型的UPDATE 操作产生的 redo log 内容示例。

环境准备

假设有一张表:

CREATETABLEt1(idINTPRIMARYKEY,nameVARCHAR(20))ROW_FORMAT=COMPACT;

执行更新:

BEGIN;UPDATEt1SETname='Bob'WHEREid=1;COMMIT;

redo log 内容(简化示例)

InnoDB 的 redo log 是一组物理日志,记录了对某个数据页(page)的修改。上述 UPDATE 大致会产生类似下面的记录(十六进制表示,实际结构更复杂,此处做合理简化):

--- 事务开始 --- [MLOG_1BYTE] space_id=0, page_no=4, offset=100, value=0x01 (标记页内某标志位) [MLOG_REC_UPDATE] space_id=0, page_no=4, offset=128, old_value: {'id':1, 'name':'Alice'} new_value: {'id':1, 'name':'Bob'} --- 事务提交 --- [MLOG_GROUP_COMMIT_ID] ... (提交信息)

或者更贴近真实结构的记录(类似ib_logfile中的原始格式):

# 一段 redo log block 的十六进制 dump 0x00000000 5a 2b 4c 02 00 00 00 00 00 00 00 1f 00 00 02 03 |Z+L.............| 0x00000010 00 00 00 04 00 00 00 80 00 00 00 01 02 00 00 00 |................| ... # 实际含义: # type = MLOG_REC_UPDATE (0x1f) # space = 0 # page_no = 4 # offset = 128 # old len = 20, new len = 20 # old name = 'Alice' # new name = 'Bob'

更直观的模拟示例

为了便于理解,可以用伪代码形式表示一条 redo 记录:

{"type":"MLOG_REC_UPDATE","space_id":0,"page_no":4,"page_offset":128,"record_old":{"id":1,"name":"Alice"},"record_new":{"id":1,"name":"Bob"},"undo_ptr":"0x7F3A2B4C","checksum":0xABCD1234}

关键点说明

  • 物理日志:redo log 记录的是对某个数据页具体字节的修改,而非 SQL 语句。所以即使相同的 UPDATE 语句,redo log 内容也取决于当时数据页的位置。
  • 循环写入:redo log 是固定大小、循环覆盖写入的。示例中只展示了一条记录,实际一组事务可能对应数十条甚至更多 redo 记录。
  • 组提交:多个并发事务的 redo 日志可能一起写入,提高性能。
  • 崩溃恢复:MySQL 崩溃重启后,会扫描 redo log,根据这些记录重放所有已提交事务的修改,并将未提交事务的回滚。

查看真实 redo log 的工具

如果你在自己的 MySQL 环境中想查看真实的 redo log 内容,可以使用以下工具:

  • innodb_log_info(MySQL 8.0 自带)
  • hexdump直接查看ib_logfile0文件
  • Percona 的innodb_log_parser(第三方工具)

不过原始文件是二进制格式,直接查看很难解读,通常只有在调试 InnoDB 内部时才会分析。

http://www.jsqmd.com/news/661875/

相关文章:

  • Kubernetes资源配额实战:LimitRange配置指南
  • PINN实战:从零构建一个偏微分方程求解器
  • 海洋CMS资源接口实战:XML数据格式与API调用详解
  • STM32 FOC电机库PID调参避坑指南:为什么你的定点参数调不好?
  • 邢台脱发白发理疗养发馆哪家好?黑奥秘参与行业标准制定,专业有据可依 - 美业信息观察
  • AMD平台ESXI 7.0实战:避坑部署Win11与TrueNAS虚拟化存储方案
  • Flask-Admin进阶指南:从基础增删改查到自定义视图和权限控制的完整配置流程
  • 从入门到实战:在UniApp中高效集成uCharts图表(组件与原生双模式详解)
  • 大模型应用开发实战(19)——Andrej Karpathy Skills 为什么突然火了?一份 CLAUDE.md,把 Claude Code 从“会写”拉回“会做事”
  • 2026年团鱼脚鱼甲鱼养殖基地推荐:中华鳖老鳖水鱼专业供应与回收服务选型指南 - 品牌推荐官
  • ContextMenuManager:Windows右键菜单终极解决方案,3个核心功能重塑你的操作效率
  • 别再傻傻地直接扫了!手把手教你用wafw00f在Windows和Kali上优雅地“试探”网站防火墙
  • Intel RealSense D435i数据采集避坑指南:Python脚本获取相机内参、外参并同步保存多传感器图像
  • TMSpeech:Windows本地实时语音识别工具终极配置指南
  • 2026年台式净饮机推荐:碧云泉G7S万相凭实力问鼎年度榜首 - 品牌企业推荐师(官方)
  • 设计模式系列目录
  • 如何用Open-Lyrics实现AI字幕生成与语音翻译:3步完成多语言转换
  • Mysql--基础知识点--101--在线扩容
  • 给企业开发者的MFI指南:当你的App需要连接Honeywell扫描枪时,info.plist和PPID该怎么填?
  • Infinity图像合成实战:如何用比特级建模提升你的AI画质(附GitHub代码)
  • 【技术解析】SwAV:用在线聚类与最优运输破解无监督视觉特征学习难题
  • 考不上高中怎么办,上海华科学校铸就别样精彩 - 品牌企业推荐师(官方)
  • 别再手动传数据了!用MatrikonOPC连接Matlab和NX MCD,实现自动化联合仿真
  • 远程生理信号监测终极指南:rPPG框架的完整实践教程
  • MOTR:基于Transformer的端到端多目标跟踪框架深度剖析
  • 仅限首批200家企业的AGI治理合规工具包泄露(源自2026奇点大会技术委员会内部推演)
  • ESP32 UI美化秘籍:手把手教你从阿里图标库(iconfont)扒图标,集成到LVGL界面里
  • ESP32的GPIO不够用?手把手教你用I2C和PCA9557扩展8个IO(附完整代码)
  • Wan2.2-I2V-A14B效果对比评测:YOLOv11目标检测框引导下的精准视频生成
  • 2026年西安上门安装空调/中央空调维修公司推荐:陕西创翔建达建筑工程有限公司,提供空调安装、移机、维修等多类服务 - 品牌推荐官