首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
面试官:MySQL Redo Log 和 Binlog 有什么区别?分别用在什么场景?

面试官:MySQL Redo Log 和 Binlog 有什么区别?分别用在什么场景?

热心网友
57
转载
2025-12-15

Redo Log 保存在 InnoDB 中,用于保证宕机后数据不丢,是 MySQL 支持数据库事务的基础。Binlog 保存在 MySQL server 层,用于主从同步或点播恢复。

MySQL 的 Redo Log 和 Binlog是两种完全不同、但又紧密协同的日志机制。理解这两种日志,对理解MySQL的事务机制有重要帮助。今天来聊一聊这两种日志。

1.概念回顾

1.1 两阶段提交

我们知道,分布式事务一般都是使用两阶段提交达到最终一致。比如下图一个购买商品的案例,用户下订单后,订单服务保存订单,账户服务扣减金额,库存服务扣减库存。这三个服务通过两阶段提交,先prepare,然后commit最终实现事务一致性。

图片图片

1.2 事务提交

我们再来看一下MySQL的逻辑架构,看下图:

图片图片

在 MySQL逻辑架构中,执行器负责执行具体的SQL,跟存储引擎进行交互。

执行器就是两阶段提交的“事务协调者”,事务执行过程如下图:

图片图片

假如我们要执行一条SQL:

update t set a=10 where id=5;

这个 SQL的执行过程如下:

执行器先从存储引擎拿到id=5这一行数据,然后把这一行数据的字段 a 改成 10,再把这行修改后的数据写入存储引擎。prepare阶段:存储引擎将这行新数据写入内存,同时将这行数据的更新操作记录到Redo Log ,但不提交事务,然后给执行器返回成功。此时Redo Log 处于 prepare状态。执行器为这行数据的更新操作生成 Binlog 并写入磁盘,当然,是否刷盘要根据sync_binlog配置来决定。commit阶段:执行器通知存储引擎提交事务,存储引擎把刚刚写入的Redo Log改成提交commit状态,完成事务提交。

2.Redo Log

2.1 介绍

从前面介绍可以看到,Redo Log是存储引擎层控制的日志,事实上,Redo Log 是 InnoDB 存储引擎特有的日志,它是一个物理日志, 记录了在某个数据页上做了哪些修改,主要用于崩溃恢复。

Redo Log的刷盘机制通过下面参数来控制:

innodb_flush_log_at_trx_commit0:事务提交时,Redo Log不会被立刻被写入磁盘,而是存在缓存中(Redo Log Buffer),InnoDB后台日志线程每秒将日志从缓冲区写入文件系统缓存(Page Cache),然后调用fsync落盘。优点是减少了I/O操作,提升了性能,缺点是如果MySQL服务挂了,或者操作系统宕机,可能丢失1s的数据。1:默认值。事务提交时,Redo Log立即写入Page Cache,并调用 fsync保存磁盘,优点是系统宕机时丢失数据风险小,缺点是磁盘I/O操作频繁,影响性能。2:事务提交时,Redo Log被直接写入到Page Cache,然后依赖操作系统的刷盘机制将Page Cache中的日志写入磁盘,优点是性能好,如果MySQL服务挂了,并不会导致数据丢失,只有操作系统宕机,Page Cache未刷盘的数据才会丢失。

2.2 写日志

在写数据时,Redo Log是循环写,空间大小固定,写满后会覆盖掉前面的日志。

Redo Log采用固定大小的文件组,比如下图文件组配置了 4 个文件,每个文件大小相同,写满一个后接着写下一个,全部写满后就清除一部分前面的日志,继续写入。write pos控制当前写入的位置,check point控制可以写入的最后位置,如果两个点重合了,那就需要清除部分日志,让check point 后移。

图片图片

2.3 Redo Log 使用场景

崩溃恢复

这是 Redo Log最根本的用途。它确保了数据库宕机后,已提交事务的数据不会丢失。Redo Log 基于 WAL (Write-Ahead Logging)原则,即先写日志,再写磁盘。事务提交时,先将修改内容的记录到Redo Log,MySQL宕机重启后,利用Redo Log做崩溃恢复。恢复过程如下。

首先,InnoDB会检查数据页的LSN(日志序列号),并与Redo Log 中的 LSN 对比。Redo Log 上 LSN比数据页大的就是需要重做的数据。

接着,InnoDB会扫描Redo Log中要恢复的日志,如果日志状态是COMMIT,则直接重做。如果日志状态是PREPARE,则还要去检查对应的Binlog,如果该事务的Binlog存在且完整,说明事务已经提交成功,应该重做。如果该事务的Binlog不存在或不完整,说明事务应该回滚,Redo Log日志不进行重做。

图片图片

通过这个机制,确保了Redo Log 和 Binlog的逻辑一致性:只要Binlog写成功了,数据就一定能够被恢复;如果Binlog没写成功,说明事务应该被回滚,数据无需恢复。

优化性能

通过将数据文件随机写磁盘转换为Redo Log顺序写磁盘,大大提升了事务执行效率和数据库整体吞吐量。

3.Binlog

3.1介绍

Binlog 是 MySQL Server层的日志,所有引擎都可以使用。它是一个逻辑日志,记录的是数据逻辑的变化(比如插入一条数据),用于主从复制和故障恢复。

跟 Redo Log写日志方式不同的是, Binlog是追加写,写满一个文件后切换到下一个文件写。

3.2 刷盘时机

MySQL 中 sync_binlog参数定义了将Binlog内容从内存缓冲区同步到磁盘的频率。

0:MySQL 不会主动将 Binlog内容同步到磁盘,完全依赖文件系统刷盘机制来落盘。这种方式磁盘I/O操作较少,性能最好,但存在数据丢失的风险。1:每次事务提交时,都会将Binlog内容同步到磁盘。这种方式丢失数据的风险较小,但因为磁盘I/O操作多,容易影响数据库性能。N(N>1):每 N 个事务提交后,才会将 Binlog内容同步到磁盘。这种方式是前两种方式的折中,既考虑了一定的性能,也兼顾了数据的安全性。

3.3 Binlog 使用场景

主从复制

这是 Binlog最重要的用途。在主从架构中,Master节点将自己的Binlog发送给Slave 节点,Slave通过重放Binlog 中的 SQL语句,实现数据同步。

点播恢复

因为 Binlog完整记录了对数据库的所有更改操作,它可以通过重放来恢复某一个时间段的全部数据。在实际工作中,有时我们需要恢复数据库到某一个历史时间点的状态,这时我们可以找出这个时间点之前最近的一个全量备份,用这个全量备份恢复到一个空数据库,然后找出全量备份时间点到目标时间点之间所有 Binlog 文件并进行回放。这样就实现了精确的时间点恢复。这对于修复误操作(如误删表、误更新)非常有用。

总结

Redo Log 保存在 InnoDB中,用于保证宕机后数据不丢,是MySQL支持数据库事务的基础。Binlog 保存在 MySQL server 层,用于主从同步或点播恢复。

两者分工明确但又紧密协作,共同保障了MySQL数据安全和高可用性。

为了让两个日志区别更清晰,总结下表:


来源:https://www.51cto.com/article/824089.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

MySQL索引优化实战:从原理到高效调优的完整指南
业界动态
MySQL索引优化实战:从原理到高效调优的完整指南

之前遇到一个典型的性能问题:一个订单查询接口,平均响应时间达到了3秒,P99响应时间甚至超过10秒。用户投诉不断,老板也天天催着解决。排查后发现,一张500万数据的订单表,查询条件是WHERE user_id = ? AND status = ? AND create_time > ?,但表上只有一

热心网友
05.21
MySQL主从复制异常排查与常见原因解析
业界动态
MySQL主从复制异常排查与常见原因解析

今天处理了一个典型的主从复制中断案例,SQL线程报错1032。遇到这种情况,先别急着跳过事务——这很可能是MySQL 8 0并行复制与无主键表共同埋下的一个“暗雷”。下面咱们就顺着这条线索,从Binlog机制到Hash冲突,把这个问题彻底讲清楚。 主从复制异常是运维和面试中的常客,而触发异常的场景五

热心网友
05.21
MySQL 8.0从库报错MY-010956原因分析与修复方法
业界动态
MySQL 8.0从库报错MY-010956原因分析与修复方法

在维护MySQL 8 0主从复制架构时,你是否也曾在从库的错误日志里,被两条反复横跳的警告信息刷屏?没错,就是那个“Invalid replication timestamps”和紧随其后的“returned to normal values”。这不仅仅是日志噪音,更是一个明确的信号:你的服务器时间

热心网友
05.21
MySQL长任务中nohup失效原因与终端关闭影响解析
业界动态
MySQL长任务中nohup失效原因与终端关闭影响解析

相信不少DBA同行都遇到过这种令人头疼的场景:一个预计耗时数小时的MySQL大表结构变更操作,你熟练地输入nohup mysql -e ALTER TABLE huge_table ENGINE=InnoDB; &,然后安心地关闭了终端窗口。然而几小时后回来检查,却发现任务早已无声无息地中止,日

热心网友
05.19
阿里面试题解析MySQL与ES数据同步四种方案详解
业界动态
阿里面试题解析MySQL与ES数据同步四种方案详解

今天,我们通过一个在线旅游平台酒店搜索的实战案例,深入解析MySQL数据同步到Elasticsearch的四种主流技术方案。透彻理解这些方案,无论是应对技术面试还是处理实际开发中的架构选型,都能让你游刃有余,有效规避常见的技术陷阱。 许多开发者都曾面临类似的困境:面试中被问到如何保障MySQL与ES

热心网友
05.18

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

刺鸟创客AI内容创作平台高效稳定使用指南
AI教程
刺鸟创客AI内容创作平台高效稳定使用指南

在内容创作领域,效率与质量是每一位创作者必须平衡的核心课题。选择一个功能强大的专业平台,能够有效提升产出能力与作品水准。本文将为您深度解析“刺鸟创客”——一个专为写作者设计的AI辅助创作平台,看看它如何成为您创作路上的得力助手。 核心定位与独特优势 刺鸟创客是一个集专业内容生产、高效创作流程与稳定服

热心网友
05.24
欧拉蜜人工智能开放平台OLAMI功能详解与使用指南
AI教程
欧拉蜜人工智能开放平台OLAMI功能详解与使用指南

在人工智能技术快速发展的当下,如何让开发者高效、便捷地将AI能力集成到自己的产品中,已成为一个关键课题。市场上有多种平台提供此类服务,其中OLAMI欧拉蜜人工智能开放平台,是一个值得开发者重点关注的解决方案。 概括而言,OLAMI欧拉蜜是一个综合性的AI开放平台。它集成了云端API接口、便捷的管理后

热心网友
05.24
文心快码使用指南与高效编程技巧
AI教程
文心快码使用指南与高效编程技巧

文心快码是什么? 在软件开发领域,提升编码效率是开发者永恒的追求。百度推出的文心快码(Baidu Comate),正是这样一款基于百度文心大模型打造的智能编程助手。它深度融合了百度在人工智能与编程领域的海量数据与深厚技术积累,旨在为开发者提供实时的AI辅助。自2023年6月发布以来,文心快码快速迭代

热心网友
05.24
Hey Friday公文写作助手使用指南与技巧
AI教程
Hey Friday公文写作助手使用指南与技巧

在内容创作领域,效率与质量往往难以兼顾。是否存在一款工具,能够像一位不知疲倦的助手,将您的灵感迅速转化为结构严谨、语言流畅的优质文章?今天我们将深入探讨的HeyFriday,正是这样一款旨在解决此痛点的智能写作助手。 HeyFriday是什么? 简而言之,HeyFriday是一个专注于帮助用户高效生

热心网友
05.24
改图鸭AI绘画在线图像处理工具使用指南
AI教程
改图鸭AI绘画在线图像处理工具使用指南

在当今数字化时代,无论是社交媒体运营、内容创作还是日常办公,一款简单易用且功能强大的在线图片编辑工具都显得尤为重要。改图鸭作为一款全面的在线图像处理平台,集成了多种实用功能,让用户无需下载复杂的专业软件,直接在浏览器中就能完成绝大多数常见的图片编辑需求,大大提升了工作效率。 核心功能:从基础编辑到智

热心网友
05.24