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

MySQL的三大核心日志详解(redo log,bin log,undo log)

MySQL的三大核心日志——redo log、binlog和undo log——是保障数据一致性、实现崩溃恢复以及支持高可用架构的基石。它们各有分工又相互协作。我先用一个表格帮你快速建立起对它们核心区别的直观认识然后再详细拆解它们各自的作用、使用方法以及如何协同工作。 三大核心日志对比一览特性redo log (重做日志)binlog (二进制日志)undo log (回滚日志)日志类型物理日志记录“数据页做了什么修改”。逻辑日志记录原始SQL语句或行变更逻辑。逻辑日志记录数据修改前的状态。所属层级InnoDB存储引擎层特有的。MySQL Server层所有引擎都可使用。InnoDB存储引擎层特有的。主要作用保证事务的持久性(Durability)实现崩溃恢复(crash-safe)。用于数据恢复(PIT恢复)和主从复制。保证事务的原子性(Atomicity)支持事务回滚和MVCC。写入方式循环写空间固定会覆盖旧记录。追加写写满一个文件就创建新文件保存全量历史。同样追加写但会记录旧数据形成版本链用于回滚和MVCC。接下来我们通过具体的示例来看看它们是如何工作的。 日志详解与使用示例1. undo log (回滚日志)作用它是保障事务原子性的关键。它记录了事务开始前数据的“旧值”。如果事务执行失败或执行了ROLLBACKMySQL可以利用undo log将数据恢复到这个事务开始前的状态。进阶用途它也是实现MVCC多版本并发控制的核心。当多个事务并发读取同一条记录时undo log中记录的多个版本可以确保每个事务读到它应该看到的那个数据快照。使用示例事务回滚假设有一张表accountid1的余额balance100。我们开始一个事务将余额更新为200但中途反悔了决定回滚。-- 1. 开启事务STARTTRANSACTION;-- 2. 执行更新操作。此时MySQL会先将旧值(100)记录到undo log中然后再更新内存中的数据。UPDATEaccountSETbalance200WHEREid1;-- 3. 检查数据后发现更新错了决定回滚。-- 此时MySQL会读取之前记录的undo log将数据恢复为旧值100。ROLLBACK;-- 4. 再次查询数据回到了100。SELECT*FROMaccountWHEREid1;-- 结果 balance 100在这个例子中ROLLBACK命令能够生效全靠undo log里记录的那份“旧值”数据。2. redo log (重做日志)作用它保证了事务的持久性。MySQL采用了WAL (Write-Ahead Logging)技术更新数据时不直接写磁盘数据文件而是先顺序写入redo log。这样即使数据库突然崩溃已提交事务的数据尚未写入数据文件重启后也可以通过重放redo log来恢复数据这就是crash-safe能力。为何更快写redo log是顺序I/O而写数据文件是随机I/O顺序写的性能远高于随机写。使用示例崩溃恢复假设你在执行一个更新操作更新id1的记录。InnoDB会把这个更新记录到redo log中然后将内存中的数据页标记为“脏”。此时即使数据文件还没更新事务也算提交成功了。如果数据库在此时突然宕机重启后MySQL会自动扫描redo log将这个已提交但还未写入数据文件的更新操作“重做”一遍确保数据不丢。3. binlog (二进制日志)作用作为Server层的日志它记录了所有修改数据库内容的操作DDL和DML不包括SELECT。它的核心功能是数据恢复和主从复制。使用示例数据恢复binlog以事件的形式记录了所有变更。你可以使用mysqlbinlog工具来解析它并恢复到某个时间点或某个位置的数据。假设你在中午12点误执行了一条DELETE FROM important_table需要恢复到误操作前的状态。恢复思路先利用之前的全量备份恢复数据库然后使用mysqlbinlog工具提取从备份时间点到中午12点之前的所有binlog排除了那条错误的DELETE语句并将其应用到数据库。# 解析binlog将指定时间范围内的操作导出为SQL文件mysqlbinlog --start-datetime2024-01-01 10:00:00--stop-datetime2024-01-01 11:59:59/var/lib/mysql/binlog.000001recovery.sql# 然后执行这个SQL文件进行恢复mysql-uroot-precovery.sql这个命令就是从binlog.000001文件中提取出指定时间段内的操作并生成一个SQL文件。 它们是如何协同工作的以更新语句为例为了确保数据的一致性这三个日志在一条更新语句的执行过程中密切配合。这里有一个经典的“两阶段提交”流程假设我们要执行UPDATE user SET age19 WHERE id1;准备阶段执行器找到id1这行数据可能从内存或磁盘。在更新这行数据前先记录undo log将age18这个旧值保存下来以便回滚。执行器更新内存中的数据页将age改为19。InnoDB引擎将这个更新操作写入redo log并将其状态标记为prepare准备阶段。这时redo log已经持久化到磁盘。写入binlog执行器生成这条操作的binlog并将其写入磁盘持久化。提交阶段执行器通知InnoDB引擎事务可以提交了。InnoDB将刚才那条处于prepare状态的redo log更新状态为commit提交。至此整个事务才算真正完成。为什么要这么麻烦两阶段提交的作用这个机制是为了保证redo log和binlog这两个日志的逻辑一致性。情况A如果在写入binlog之前系统崩溃了。重启后由于redo log处于prepare状态但binlog还没写说明这个事务是未完成的就会通过undo log进行回滚。情况B如果在binlog写入成功后、redo log变为commit前崩溃了。重启后虽然redo log是prepare状态但检查到对应的binlog已经完整写入MySQL就会认为这个事务是完整的提交这个事务。通过这种方式就确保了无论是在主从复制还是崩溃恢复中数据都是一致的。希望这份详细的梳理能帮你更好地理解MySQL的三大日志。如果后续想深入了解MVCC的原理或者binlog不同格式的区别随时可以再来问我。

相关文章:

MySQL的三大核心日志详解(redo log,bin log,undo log)

MySQL的三大核心日志——redo log、binlog 和 undo log——是保障数据一致性、实现崩溃恢复以及支持高可用架构的基石。它们各有分工,又相互协作。 我先用一个表格帮你快速建立起对它们核心区别的直观认识,然后再详细拆解它们各自的作用、使用方法以及如…...

VisualSVN Server安装避坑指南:从下载到配置的完整流程(含常见错误解决)

VisualSVN Server实战安装指南:从零搭建到高效配置 在团队协作开发中,版本控制系统如同空气般不可或缺。作为集中式版本控制的经典解决方案,VisualSVN Server以其与Windows系统的深度整合、直观的图形化管理界面和稳定的性能表现,…...

Netcode for Entities网络同步创新实践

Netcode for Entities网络同步创新实践 【免费下载链接】EntityComponentSystemSamples 项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples 在多人在线游戏开发中,开发者常常面临网络延迟导致的操作卡顿、状态不同步、高并发…...

自动驾驶轨迹预测新突破:MTR框架如何用Transformer实现多模态预测(附代码解析)

自动驾驶轨迹预测新突破:MTR框架如何用Transformer实现多模态预测 在自动驾驶技术快速发展的今天,轨迹预测作为核心环节之一,直接影响着车辆决策的安全性和流畅性。传统方法往往难以应对复杂多变的交通场景,而基于Transformer的MT…...

Pixel Dream Workshop 数据库课程设计应用:可视化生成ER图与系统界面原型

Pixel Dream Workshop 数据库课程设计应用:可视化生成ER图与系统界面原型 1. 引言:数据库课程设计的新工具 每到学期末,计算机专业的学生们都会面临一个共同的挑战——数据库课程设计。从需求分析到ER图绘制,再到系统界面设计&a…...

阿里云 SSL 证书续签操作指南

1. 登录控制台 访问 阿里云控制台,登录你的账号后,在顶部搜索框输入 数字证书管理服务(原 SSL 证书),进入证书管理页面。 2. 找到目标证书 在「正式证书」或「上传证书」页签下,找到你即将过期的 aaaa.xxxx…...

SpringBoot循环依赖避坑指南:为什么@Lazy注解不是万能的?

SpringBoot循环依赖避坑指南:为什么Lazy注解不是万能的? 在SpringBoot开发中,循环依赖问题就像一把双刃剑——表面上看是技术问题,深层次却反映了架构设计的合理性。许多开发者遇到循环依赖时,第一反应就是加上Lazy注…...

探索whopping_Voron_mods:解锁Voron 3D打印机精度革新的6大专业方案

探索whopping_Voron_mods:解锁Voron 3D打印机精度革新的6大专业方案 【免费下载链接】whopping_Voron_mods 项目地址: https://gitcode.com/gh_mirrors/wh/whopping_Voron_mods whopping_Voron_mods开源项目为Voron 3D打印机用户提供了一套完整的精度提升解…...

M2LOrder模型Java八股文与面试题智能梳理与解析

M2LOrder模型Java八股文与面试题智能梳理与解析 最近在帮团队筛选Java开发岗位的候选人,发现一个挺有意思的现象:很多朋友对“八股文”是又爱又恨。爱的是,它确实是面试的敲门砖,能快速检验基础知识;恨的是&#xff0…...

个人游戏笔记本免费“养龙虾”(二)用显卡GPU运行OpenClaw,CUDA的安装与配置

个人游戏笔记本免费“养龙虾”(二)用显卡GPU运行OpenClaw,CUDA的安装与配置Win10下配置WSL2使用CUDA1、windows安装nvidia GPU驱动2、在WSL2中安装CUDA3、添加CUDA Toolkit路径4、关联nvidia-smi5、【解决】error:unable to alloc…...

ThinkPad X1 Tablet gen2键盘改造全记录:从磁吸接口到Type-C键线分离的完整指南

ThinkPad X1 Tablet gen2键盘改造全记录:从磁吸接口到Type-C键线分离的完整指南 作为一名长期依赖键盘工作的技术爱好者,我对输入设备的手感和可靠性有着近乎苛刻的要求。ThinkPad系列键盘以其独特的"小红点"设计和出色的敲击手感在业界享有盛…...

ARM和x86架构下,Linux内核访问硬件寄存器的“黑话”:`__iomem`的前世今生

ARM与x86架构下__iomem的设计哲学:硬件抽象层的艺术 第一次在Linux内核代码中看到void __iomem *这样的类型声明时,我下意识地把它当成了普通的指针类型。直到有一天在ARM平台上调试设备驱动时,直接解引用这样的指针导致了一个难以追踪的bug…...

RWKV7-1.5B-g1a部署教程:适配昇腾910B/寒武纪MLU等国产算力平台可行性说明

RWKV7-1.5B-g1a部署教程:适配昇腾910B/寒武纪MLU等国产算力平台可行性说明 1. 模型简介 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构的多语言文本生成模型,特别适合中文场景下的基础问答、文案续写、简短总结和轻量对话任务。作为一款轻量级模型&#xf…...

论文通关第一道闸:paperzz 查重系统,让重复率与 AIGC 检测双无忧

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 论文查重https://www.paperzz.cc/check 一、开篇:毕业论文的 “生死关卡”,查重与 AI 检测难倒无数毕业生 大四毕业季,当你写完论文正文、调好格式&#xff0c…...

开源大模型SiameseUniNLU保姆级教程:从Docker构建到Web界面全链路实操

开源大模型SiameseUniNLU保姆级教程:从Docker构建到Web界面全链路实操 你是不是也遇到过这样的烦恼?想做一个文本分类任务,得找一个专门的模型;想做命名实体识别,又得换一个模型;想做关系抽取,…...

CubiFS分布式文件系统部署指南:从概念到生产环境的完整实践

CubiFS分布式文件系统部署指南:从概念到生产环境的完整实践 【免费下载链接】cubefs CubiFS 是一个开源的分布式文件系统,用于数据存储和管理,支持多种数据存储模型和云原生环境。 * 分布式文件系统、数据存储和管理 * 有什么特点&#xff1a…...

企业级AI聚合平台架构解析:ChatNio分布式多模型支持与性能优化实战

企业级AI聚合平台架构解析:ChatNio分布式多模型支持与性能优化实战 【免费下载链接】chatnio 🚀 强大精美的 AI 聚合聊天平台,适配OpenAI,Claude,讯飞星火,Midjourney,Stable Diffusion&#xf…...

3步掌握PBR材质生成:让3D建模效率提升70%

3步掌握PBR材质生成:让3D建模效率提升70% 【免费下载链接】Materialize Materialize is a program for converting images to materials for use in video games and whatnot 项目地址: https://gitcode.com/gh_mirrors/mate/Materialize 认识PBR材质&#x…...

Qwen3-TTS-1.7B-CustomVoice部署教程:使用Ollama本地运行Qwen3-TTS的极简方案

Qwen3-TTS-1.7B-CustomVoice部署教程:使用Ollama本地运行Qwen3-TTS的极简方案 想要在本地电脑上运行强大的多语言语音合成模型吗?Qwen3-TTS-1.7B-CustomVoice 让你能够用10种不同语言生成自然流畅的语音,而且完全在本地运行,不需…...

5天掌握YOLO:从入门到实战的计算机视觉工程师指南

5天掌握YOLO:从入门到实战的计算机视觉工程师指南 【免费下载链接】ultralytics ultralytics - 提供 YOLOv8 模型,用于目标检测、图像分割、姿态估计和图像分类,适合机器学习和计算机视觉领域的开发者。 项目地址: https://gitcode.com/Git…...

基于comsol的三维水平集激光打孔熔池流动数值模拟,考虑反冲压力,马兰戈尼对流,表面张力,重...

基于comsol的三维水平集激光打孔熔池流动数值模拟,考虑反冲压力,马兰戈尼对流,表面张力,重力,浮力等熔池驱动力。激光打孔这事儿看着简单,实际金属熔池里藏着物理界的"神仙打架"。温度飙到几千度…...

AI编程使用问题汇总~持续更新中

背景 claudecode 和 openclaw 交替使用,记录问题。 问题1:模型配置错误 claude 对话时报错:API Error: 403 {"error":{"message":"Model claude-sonnet-4-5-20250929 is not allowed for this provider. Allow…...

用代码探索黑翅鸢算法优化的时序预测模型

【24年最新算法独家】BKA-CNN-BiLSTM-Attention多变量时序预测 基于黑翅鸢算法(BKA)优化卷积神经网络(CNN)-双向长短期记忆神经网络(BiLSTM)-注意力机制(Attention)的多变量时序预测(可更换为分类/回归预测,前私),Matlab代码,可直接运行&…...

手撕BIC:从能带仿真到拓扑电荷计算

nature文章中的BIC能带仿真计算 ,包括能带计算Q因子计算,拓扑电荷计算,包括询问等,所见即所得。搞过光子晶体的老铁都知道,BIC(连续体束缚态)这玩意儿就像二维材料里的幽灵——明明应该辐射损耗…...

从PXE到iPXE:如何为自动化装机定制你的UEFI/Legacy双模引导文件?

从PXE到iPXE:异构环境下的双模引导文件定制实战指南 当企业IT基础设施同时存在Legacy BIOS和UEFI设备时,传统的PXE引导方案往往捉襟见肘。我曾为一家金融机构升级自动化装机系统时,发现其数据中心同时运行着2012年的老式刀片服务器和2023年采…...

Django版本升级避坑指南:3大阶段+5个反常识策略

Django版本升级避坑指南:3大阶段5个反常识策略 【免费下载链接】django django/django: 是一个用于 Python 的高级 Web 框架,可以用于快速开发安全和可维护的 Web 应用程序,提供了多种内置功能和扩展库,支持多种数据库和模板引擎。…...

MCP与VS Code共存架构设计(单进程多语言Agent协同模型|2026唯一通过VSIX签名认证方案)

第一章:MCP与VS Code共存架构设计(单进程多语言Agent协同模型|2026唯一通过VSIX签名认证方案)该架构在 VS Code 1.90 原生扩展宿主环境中实现 MCP(Multi-language Coordination Protocol)协议栈的深度集成&…...

PyQt5开发口罩检测GUI:从模型部署到界面设计的完整流程

PyQt5开发口罩检测GUI:从模型部署到界面设计的完整流程 1. 引言 想自己动手做一个能实时检测口罩佩戴情况的桌面应用吗?今天我来分享如何使用PyQt5和OpenCV,从零开始构建一个完整的口罩检测GUI应用程序。无论你是Python初学者还是有一定经验…...

重构语音去混响技术栈:Nara WPE在企业级声学信号处理中的实战革新

重构语音去混响技术栈:Nara WPE在企业级声学信号处理中的实战革新 【免费下载链接】nara_wpe Different implementations of "Weighted Prediction Error" for speech dereverberation 项目地址: https://gitcode.com/gh_mirrors/na/nara_wpe 在远…...

Qwen2.5-7B-Instruct效果展示:结构化输出惊艳案例集

Qwen2.5-7B-Instruct效果展示:结构化输出惊艳案例集 1. 模型能力概览 1.1 核心特点 Qwen2.5-7B-Instruct作为通义千问团队最新推出的指令微调模型,在结构化输出方面展现出令人印象深刻的能力: 精准JSON生成:能够严格遵循JSON …...