binlog、redolog、undolog

binlog redolog undolog 1、二进制日志(Binlog)Binlog主要用于MySQL中的复制它包括表示对数据库进行的修改的SQL语句或原始二进制数据2、重做日志(Redo Log)重做日志是事务日志的一部分,用于崩溃恢复和确保数据持久性记录了一个事务修改了那些磁盘,分别修改了那些字段那些值信息update 可能更改了多个磁盘区域的数据,数据刷到磁盘的每个扇区里无法保证原子性3、撤销日志(Undo Log)撤销日志用于存储事务修改的数据的先前图像,使回滚成为可能,确保事务一致性。 阅读详情

目录

一、binlong

1、binlog介绍

作用

特点

2、日志格式

3、写入流程

二、redo log

1、redo log作用

2、刷盘时机

3、redo log如何写入

4、怎么提交数据进行刷盘

4、奔溃恢复流程

三、undolog

一、binlong

1、binlog介绍

作用

binlog是 mysql server 层的一种二进制日志,用来记录数据库的写入操作,并以"事务"的形式保存在磁盘上,主要的使用场景有主从复制和数据恢复。

特点

  • 记录了对 MySQL 数据库执行了更改的所有操作,包括表结构变更(CREATE、ALTER、DROP TABLE…)、表数据修改(INSERT、UPDATE、DELETE...),但不包括 SELECT 和 SHOW 这类操作,因为这类操作对数据本身并没有修改;若更改操作并未导致数据库变化,那么该操作也会写入 binlog
  • binlog是追加写,写到一定大小会切换到下一个,并不会覆盖以前的日志。

2、日志格式

  • statement:只记录执行的 SQL,不需要记录每一行数据的变化,因此极大的减少了 binlog 的日志量,但是类似 set update_time=now() 这种情况,可能会导致主从数据不一致。
  • row:记录SQL涉及到的每行数据的修改,由于要记录每一行数据的变化,因此缺点是会产生大量的日志,mysql 5.7.7之后默认 row 模式
  • mixed:两种方案折中,MySQL会判断这条SQL语句是否会引起数据不一致,如果是,就用row模式,否则就用statement模式

3、写入流程

先把日志写到binlog cache,事务提交的时候,再根据刷盘规则将binlog cache写入文件。

默认情况:每次提交事务都会执行 write + fsync 

write:将 mysql 缓存写到文件系统的 page cache,并没有把数据持久化到磁盘,速度比较快
fsync:文件系统的 page cache 持久化到磁盘

二、redo log

1、redo log作用

  • redo log (重做日志)是InnoDB存储引擎产生的,记录事务对数据页的修改。奔溃恢复时,重启后InnoDB会使用redo log恢复数据,保证了数据的持久性。
  • 每一次更新都需要写到磁盘上。然后磁盘也要找到对应的记录,然后再更新,整个过程IO成本、查找成本太大,为了解决这个问题,MySQL的设计者采用了WAL技术来解决。WAL全称是Write Ahead Logging,意思就是先写日志,再写磁盘。

2、刷盘时机

redo log 为了提高性能也使用了缓存redo log buffer ,可以通过 innodb_flush_log_at_trx_commit 来配置刷盘策略,默认 = 1 ,不会丢数据。除了事务提交时刷盘,InnoDB存储引擎还有一个后台线程,每隔1秒,执行一次 write + fsync 刷盘。

  • 0 :每次事务提交时不进行刷盘操作,mysql挂了会丢失1秒数据
  • 1 :每次事务提交时都将进行刷盘操作 write + fsync,不会丢数据
  • 2 :每次事务提交时只执行write,mysql挂了不会丢数据,服务器挂了会丢失1秒数据

还有一种情况,当redo log buffer占用的空间即将达到 innodb_log_buffer_size 一半的时候,后台线程会主动刷盘

3、redo log如何写入

简介:redo log默认情况下存储在data目录下ib_logfile0 、ib_logfile1,可以通过 innodb_log_file_size 设置大小, innodb_log_files_in_group 设置文件个数,比如可以配置为一组4个文件,每个文件的大小是 1GB,整个redo log 日志文件组可以记录4G的内容,

redo log是循环写的:

  • write pos:当前记录的位置,一边写一边后移
  • checkpoint:当前要擦除的位置,也是往后推移并且循环的,脏页刷盘,checkponit往后移。擦除记录之前要把记录更新到数据文件中。
  • 绿色的部分表示可以记录新的操作,是未刷入磁盘的日志。如果write pos追上了check point,表示redo log满了,这个时候就不能继续执行新的操作,需要停下擦除一些记录,并且把check point往后推进。

备注:每个数据页都有一个LSN,redo log 中也记录了LSN,当数据库异常重启时,系统读取redo log并定位到checkpoint位置,如果此时当redo log中的LSN大于数据页中的LSN,说明redo log中的数据未完全写入数据页中,那么将从数据页中记录的LSN开始,从redo log中恢复数据。比如redolog 的LSN 是 13000,数据库页的LSN是 10000,那么系统将会恢复redo log 中LSN从10000开始到13000的记录到数据页中。当redo log中的LSN小于数据页中的LSN时,说明数据页已经被刷到该位置,所以不需要进行恢复。 

4、怎么提交数据进行刷盘

二阶段提交:通过二阶段提交保证奔溃恢复时不会有丢失事务数据或者主从不一致的问题

InnoDB事务提交之前并不是直接写redo log,而是使用了二阶段提交,将redo log的写出拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"。

Prepare阶段(Execute阶段):InnoDB引擎把新数据更新到内存,同时把Insert操作记录到redo log并刷盘,此时redo log的状态为 prepare;

Commit阶段: Server执行器生成这个操作的Binlog,并落盘,执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log状态更新为 commit状态.

为什么要使用两阶段提交呢?

假设没有redo log直接提交:

  • 先写binlog,没写redolog。mysql崩溃,事务回滚,但是binlog已经写入,同步到从库,最终导致主从不一致。
  • 先写redo log,没写binlog。mysql崩溃,重启,通过redo log恢复事务,但是binlog里并没有这个事务,主从不一致,如果通过binlog来恢复数据,也会丢失事务。

再来看看两阶段提交:

1、如果写入redo log prepare阶段之后,mysql崩溃,重启, redo log prepare+binlog不完整,回滚事务。
2、如果在写入binlog之后,mysql崩溃,重启,redo log prepare + binlog完整,事务提交,恢复数据。

可以看到 redo log prepare阶段+完整的binlog就能保证mysql的崩溃恢复了。

binlog能不能崩溃恢复?

不可以,因为binlog是追加写入的,只要开启了binlog,所有的更新记录都会被写入,保存的是全量的日志, InnoDB不能区分出哪些数据已经刷盘,哪些还没有。而redo log是循环写的,checkpoint 和 write pos 之间的 redo log都是未刷入磁盘的日志。

4、奔溃恢复流程

崩溃恢复流程

三、undolog

InnoDB事务修改数据之前会记录undo log并且持久化,undo log通过回滚事务指针形成了链表。

使用场景:

1、MVCC 

2、通过rollback主动回滚事务

3、崩溃恢复未完成的事务通过undo log回滚

undo log 日志有两种 insert 类型 和 update 类型,insert 类型记录了主键id,update 类型记录了修改前的数据

INSERT INTO t (id, a) VALUES (1, “A”); 
UPDATE t SET a=“B” WHERE id = 1; 
UPDATE t SET a=“C” WHERE id = 1;

事务3 回滚 ,会将数据回滚到事务2修改后,而事务2想回滚它会将数据回滚到事务1插入后的状态,事务1回滚就会删除插入的记录。

参考:

binlog、redolog、undolog - 知乎

华为OD干了两个月,还是跑了 ​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。 阅读详情

相关推荐

Minio HTTPS证书配置实战:从申请到部署全流程

本文详细介绍了Minio HTTPS证书配置的全流程,从申请到部署,确保对象存储服务的安全性。内容包括证书类型选择、文件处理、服务配置调整及常见问题解决,帮助用户在生产环境中快速实现HTTPS加密传输,提升数据安全。

weixin_42638178的博客 431

图解bin log、redo log及undo log区别,2分钟吃透!

Bin log、Redo log 和 Undo log 的区别,是 MySQL 的高频面试题,大厂校招面试90%会问。在 MySQL 数据库中,Bin log、Redo log 和 Undo log 都是极为重要的日志文件。MySQL 实现事务、崩溃恢复、集群的主从复制等,底层都离不开日志,可以说日志是 MySQL 的内核所在。只有了解 MySQL 日志,才算是彻底搞懂 MySQL。本文主要探讨 Bin log、Redo log 和 Undo log 的区别。

没有伞的孩子必须努力奔跑!—小林 6789

OTN传送网实战指南:从光层到电层的完整架构解析(附配置示例)

本文深入解析OTN传送网从光层到电层的完整架构,涵盖关键组件、技术实现及配置示例。通过高速公路与光传送网的类比,详细介绍了光层超宽传输管道构建、电层业务调度核心引擎以及控制平面智能运维实战。附有典型组网方案与故障排查指南,助力网络工程师高效部署与维护OTN传送网。

tomato的博客 684

mysql中的几种日志了解

前言 MySQL中有以下日志文件,分别是:   1:重做日志(redo log)   2:回滚日志(undo log)   3:二进制日志(binlog)   4:错误日志(errorlog)   5:慢查询日志(slow query log)   6:一般查询日志(general log)   7:中继日志(relay log)。 其中重做日志和回滚日志与事务操作息...

weixin_34228387的博客 823

机器学习入门基础 | 基于python的高光谱图像特征挖掘:PCA + 形态学属性处理可视化实战

本文介绍了一种基于PCA和形态学操作的高光谱图像特征提取方法。通过主成分分析降低数据维度,再运用面积开闭操作增强空间结构特征,有效去除噪声并填补孔洞。实验采用WHU-HI-HanChuan数据集,提供完整的Python实现代码,包括数据加载、PCA降维、形态学处理及结果可视化等步骤。该方法能够显著改善图像质量,为后续分类和变化检测任务提供更好的特征输入。实验结果表明,不同阈值的形态学处理能呈现不同程度的空间结构增强效果,对区域生长、分割和聚类等应用具有重要价值。

lestatlu的博客 1046

【Linux命令大全】006.网络通讯之write命令(实操篇)

Linux write命令摘要 write是Linux系统中用于用户间实时通讯的命令工具,允许向其他登录用户的终端发送消息。主要功能包括: 基本使用:通过write username向指定用户发送消息,Ctrl+D结束输入 终端指定:当用户登录多个终端时,可用write username tty指定目标终端 实用技巧: 使用who查看在线用户 通过管道发送单行消息:echo "内容" | write user 支持多行消息发送和简单聊天会话。

yuhuasheng1997的博客 214

bin log,redo log以及undo log详解

1 bin log 1.1 定义 bin log应该说是Mysql里最核心的日志,是MySQL数据库级别的文件,记录对MySQL数据库各种引擎下执行修改的所有操作(包括DDL和DML语句),不会记录select和show语句,主要用于恢复数据库和同步数据库(主从同步)。 1.2 bin log的三种日志格式 binlog 有三种记录格式,分别是ROW、STATEMENT、MIXED。 1、ROW: 基于变更的数据行进行记录,如果一个update语句修改一百行数据,那么这种模式下就会记录100行对应的记录日志

yxg520s的博客 4596

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

mysql数据库管理-binlong介绍与管理

server-id = 1003306 服务器id,如果启用binlog,则必须设置该值。 •log-bin = /data/mysql/mysql3306/logs/my3306_binlog 表示启用binlog功能,并指定路径名称•sync_binlog = 1 sync_binlog选项控制mysql怎么刷新二进制日志到磁盘,在MySQL5.7.7后, 默认为1:表示采用同步写磁盘的方式来...

oradbm的博客 2065

功能安全实战系列09-英飞凌TC3xx LBIST开发详解

英飞凌Tricore/LBIST开发详解

initiallizer的博客 1106

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

985小水博的摸鱼日常 1376

bin log、redo log、undo log区别

bin log、redo log、undo log 区别

weixin_51754274的博客 2663

Linux 服务器上部署 OpenClaw完整教程

2. 全局安装 OpenClaw 3. 初始化配置 配置模型提供商 方式一:使用配置命令(推荐) 方式二:直接编辑配置文件 在 部分添加: 配置多个模型提供商 如果你使用 Antigravity 本地代理,可以同时配置多个模型: 配置飞书集成 1. 创建飞书应用 访问 飞书开放平台 创建企业自建应用 记录 App ID 和 App Secret 2. 配置应用权限 在飞书开放平台,为应用添加以下权限:重要: 必须使用 长连接(WebSocket) 模式,不要使用 HTTP 回调!在飞书开放

Maynor的博客 5249

mysql的binlog,redolog,undolog作用

binlog(二进制日志)、redo log(重做日志)、undo log(回滚日志)是数据库系统中用于保证事务一致性、持久性和恢复能力的关键组件

qq_40453972的博客 1577

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MySQL中Binlog Redolog Undolog区别?

通过UndoLog,数据库可以在事务回滚或并发读取时,将数据恢复到事务开始之前的状态,以保证事务的原子性和一致性,同时支持数据库的并发读取操作。它记录了数据库引擎对数据进行的修改操作,以确保即使在数据库崩溃或断电的情况下,也能够重新执行事务的修改操作,从而保证了事务的持久性和数据的一致性。Undo记录中记录了修改前的数据值、修改后的数据值以及撤销操作的详细信息。如果数据库发生崩溃或断电,数据库引擎可以通过RedoLog中的日志记录重新执行事务的修改操作,将数据库恢复到崩溃之前的状态,保证数据的一致性。

u013257321的博客 1083

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

redolog 、undolog 和binlog

redolog 、undolog 和binlog

qq_33271461的博客 1020

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL之binlog、redolog、undolog

redo log默认情况下存储在data目录下ib_logfile0 、ib_logfile1,可以通过 innodb_log_file_size 设置大小, innodb_log_files_in_group 设置文件个数,比如可以配置为一组4个文件,每个文件的大小是 1GB,整个redo log 日志文件组可以记录4G的内容,2、先写redo log,mysql崩溃,重启,通过redo log恢复事务,但是binlog里并没有这个事务,主从不一致,如果通过binlog来恢复数据,也会丢失事务。

程序猿踩坑集锦 2509

redolog binlog undolog的区别

日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。 图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。 redo log日志模块 redo log是InnoDB存储引擎层的日志,又称重做日志...

Xeroxo的博客 2269

详解Mysql的 Binlog、UndoLog 和 RedoLog

MySQL数据库中的三种关键日志机制——Binlog、UndoLog和RedoLog,各自承担着不同的功能,共同确保数据库的可靠性、一致性和可恢复性。Binlog记录所有数据库更改操作,用于主从复制、数据恢复和审计;UndoLog记录事务前的数据状态,支持事务回滚和多版本并发控制(MVCC);RedoLog记录数据页的物理修改,用于崩溃恢复和提高性能。这三种日志在事务提交时协同工作,通过两阶段提交机制保证数据一致性。

m0_66220639的博客 1304

redolog、binlog、undolog 区别与作用

一、重做日志(redo log) 作用: 确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 二、回滚日志(undo log) 作用: 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 三、二进制日志(binlog): 作用: 用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。 重做日志(redo log)

dongxiexiaoadou的博客 5848

Redolog和Undolog以及Binlog

文章目录UndologReaologBinlog Undolog UndoLog也就是我们常说的回滚日志文件 主要用于事务中执行失败,进行回滚,以及MVCC中对于数据历史版本的查看。由引擎层的InnoDB引擎实现,是逻辑日志,记录数据修改被修改前的值,比如"把id=‘B’ 修改为id = ‘B2’ ,那么undo日志就会用来存放id ='B’的记录”。   当一条数据需要更新前,会先把修改前的记录存储在undolog中,如果这个修改出现异常,则会使用undo日志来实现回滚操作,保证事务的一致性。当事务提

LeslieLau的博客 4095

binlog redolog undolog 三大日志

binlog redolog undolog 三大日志

LiuYUttong的博客 1159

MySQL之一篇读懂binlog redolog undolog

转自:https://juejin.cn/post/6860252224930070536 日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。 binlog binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog

渣渣 877

MySQL三大日志undolog、redolog、binlog

防止事务已经提交到Buffer Pool中的数据还没来的急刷到磁盘数据页服务崩溃而导致的数据丢失问题,因为事务的所有操作都记录到redo log日志文件中了,在重启mysql服务的时候,根据redo log进行重做,从而保证事务的持久性。)的形式进行命名,每个的Redo日志文件大小都是一样的,默认由两个文件组成。undo log 叫做回滚日志,它保证了事务的 ACID 特性中的原子性(Atomicity),是存储引擎层生成的日志,记录的是逻辑操作,不会去修改磁盘数据页的数据。

qq_33807380的博客 1908

MySQL的binlog,undolog,redolog

redo log 是 InnoDB 存储引擎中关键的日志机制,用于记录数据库的修改操作,确保数据的持久性和一致性。通过 redo log,InnoDB 能够在系统崩溃后恢复未完成的事务,保证数据的完整性。redo log 的高效写入和恢复机制,对提升数据库的性能和可靠性起到了重要作用。InnoDB 的 undo log(回滚日志)是用于实现事务的原子性和隔离性的一种日志机制。它主要用于在事务回滚时撤销已经执行的操作,并且在实现一致性读(如快照读)时提供旧版本数据。

weixin_39304656的博客 1092

Redolog,binlog,undolog

1.redo log 用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。 作用: 确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 内容: 物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。 什么时候产生: 事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才...

上山的人 922
上一篇: Spring Bean加载过程和引生问题
下一篇: redis cluster集群原理
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值