MYSQL系列之 redolog 和 binlog

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

上一篇中已经介绍过redo log的基本概念 MYSQL系列之 change buffer 和 redo log

binlog

MySQL整体分为两块:Server层,主要MySQL功能层面的事情,引擎层,负责存储相关。redo log是InnoDB特有的日志,Server有自己的日志,称为binlog

为什么有两份日志:

MySQL自带引擎不具有crash-safe能力,binlog只是用于归档,InnoDB使用redolog实现此功能

redolog 与 binlog 区别

1、redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
2、redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
3、redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

执行器和InnoDB引擎执行update语句流程 (二阶段提交保证一致性 - 内部事务)

在这里插入图片描述
1、 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
2、 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
3、 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
4、 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
5、 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

redolog的奔溃恢复判断机制:

如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;
如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:
a. 如果是,则提交事务;
b. 否则,回滚事务。

扩展

1、prepare阶段 2、写binlog 3、commit
当在2之前崩溃时
重启恢复:后发现没有commit,回滚。备份恢复:没有binlog 。 一致
当在3之前崩溃
重启恢复:虽没有commit,但满足prepare和binlog完整,所以重启后会自动commit。备份:有binlog. 一致

MYSQL系列:参数调优之binlog和redolog innodb_flush_log_at_trx_commit 和 sync_binlog 是 MySQL 的两个配置参数。它们的配置对于 MySQL 的性能有很大影响(一般为了保证数据的不丢失,会设置为双1,该情形下数据库的性能也是最低的)。 1、innodb_flush_log_at_trx_commit innodb_flush_log_at_trx_commit:是 Inno... 阅读详情

相关推荐

分析攻击流量样本

利用wireshark分析.pcap攻击样本的攻击流程,利用漏洞等。

一段旅途 6842

InnoDB存储引擎的redo log(重做日志)

图解: 只要是数据更新操作,就一定会涉及它们,今天就来聊聊redolog(重做日志)。 redo log redolog(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。 比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。 理想情况,事务一提交就会进行刷盘操作,但实际上,刷盘的时机是根据策略来进行的。 刷盘的时机又是一个概念,我就不展开表述了。 ...

红目香薰 1461

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2375

Mysql两大日志之binlog和redo log

Innodb 基于磁盘存储,同时按 页 的方式来管理记录,一个页的大小默认为 16KB。如果每次查询或修改都要按页和磁盘进行 IO 交互会严重影响数据库的性能,因此引入了 内存缓存; 有了内存缓存,在对数据进行查询时,先查缓存,如果数据存在直接返回,如果不存在则去磁盘读取并将读取到的页放到缓存池中,然后再返回数据;对数据的修改也是 先修改缓存池的页,而后异步的将页刷新回磁盘。但是异步刷新磁盘也带来一个新问题:在刷新磁盘前如果意外宕机,重启后内存数据已经没有了,就会导致数据丢失。

Chlapis的博客 8075

Windows Server 2019整机备份与异机还原实战:从虚拟机到物理机的完整迁移指南

本文详细介绍了Windows Server 2019整机备份与异机还原的实战操作,涵盖从虚拟机到物理机的完整迁移流程。通过环境准备、备份策略设计、具体操作步骤及迁移后优化等内容,帮助用户实现系统环境的无缝迁移,特别适用于服务器硬件升级、数据中心迁移等场景。

weixin_30555125的博客 132

MONAILabel in 3D Slicer 案例1: 在腹部CT中自动分割脾脏

MONAILabel in 3D Slicer 案例1: 在腹部CT中自动分割脾脏。

Tina姐的博客 1939

【MySQL】MySQL的三种log——binlog、redo log、undo log(一文带你彻底搞懂!)

binlog其实在日常的开发中听得很多的,因为很多时候数据的更新就依赖着binlog。举个简单的例子:我们的数据是保存在数据库里边的,现在我们对某个商品的某个字段的内容改了(数据库变更),而用户检索出的来数据是走搜索引擎的。为了让用户能够收到最新的数据,我们需要把引擎的数据也改掉。通俗来讲——数据库的变更,搜索引擎的数据也要变更于是,我们就会监听binlog的变更,如果binlog有变更了,那我们就需要将变更写到对应的数据源当中。什么是binlog。

miles067的博客 5326

基于Transformer的股票市场多因子量化选股模型,深度解析:基于Transformer的股票市场多因子量化选股模型

传统多因子模型通常采用线性回归、岭回归或Lasso回归来估计因子权重,其核心假设是因子与未来收益之间存在线性关系。然而,现实中的股票市场具有典型的非线性、非平稳和高噪声特征。卷积神经网络(CNN)擅长提取局部特征,但难以捕捉全市场股票之间的全局依赖关系;循环神经网络(RNN)及其变体LSTM虽然能处理时间序列,但存在梯度消失问题且难以并行计算。Transformer的self-attention机制能够:直接建模任意两只股票之间的相关性动态计算因子权重而非静态线性组合。

YOLO 250

第四篇:MySQL之binlog和redolog

引言 这篇文章说下MySQl中的恢复日志中的binlog和redolog。 binlog binlog称为二进制日志或者归档日志,主要记录除查询以外的操作(delete、update、insert、DML等),主要用于主从复制和数据恢复。 binlog的数据格式有如下三种 格式 做法 优点 缺点 STATEMENT 直接记录相关的SQL语句,在恢复的时候直接执行SQL语句 数据量小,节省磁盘IO 由于某些函数UUID()、NOW()等函数,并且需要上下文关联,容易造成主从复制不一致 RO

qq_40276626的博客 2095

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

用Python实现辅助病案首页主诊断编码:从数据清洗到模型上线(上)

本文介绍了一个使用Python构建AI辅助病案首页主诊断编码系统的完整指南。文章从环境搭建开始,详细讲解了数据准备与清洗策略,包括数据格式标准化、文本清洗与脱敏处理等关键步骤。系统采用深度学习技术处理复杂的医疗文本,解决ICD编码面临的文本复杂性、专业性和数据不一致性等挑战。文中提供了完整的代码实现,涵盖数据预处理、敏感信息脱敏、文本分割等实用功能模块,帮助医疗机构构建可落地、可扩展的智能编码系统,提高编码准确性和工作效率。

AllenLV的博客 922

开始MySQL之路——MySQL三大日志(binlog、redo log和undo log)概述详解

MySQL实现事务、崩溃恢复、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL。日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。我们重点需要关注的是MySQL的三大日志系统:Redo Log(重做日志)Undo Log(恢复日志)Bin Log(二进制日志文件)。一、Redo Log(重做日志)

weixin_62458944的博客 2835

Android 64位支持的坑:诡异的文件名问题

最近在尝试发布我的Android应用程序的更新时,遇到了一个令人困惑的64位错误。本文将详细讲解这个问题的产生原因及解决方法,供大家参考。

m0_74337424的博客 122

【mysql系列】 三大日志详解(binlog、redolog、undolog)

binlog、redolog、undolog redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。 binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志 逻辑日志:可以简单理解为记录的就是sql语句。 物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更。 binlog是通过追加的方式进行写入的,可以通过max_binlog_size参数设置每个...

arispy的博客 1077

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MYSQL学习系列(一)(binlog,redolog,undolog)

MYSQL学习系列(binlog,redolog,undolog) 文章目录MYSQL学习系列(binlog,redolog,undolog)binlogundo logredo logundo log/redo log的差异 binlog binlog是二进制文件,该日志会记录全部的数据库表结构变更,及数据变更。相应的,对SELECT和2. SHOW操作不会做记载。 二进制日志包含两类文件: 日志索引文件,文件后缀为.index,该文件用于记录所有的二进制日志文件。 二进制日志文件,文件后缀为.000

yandong blog 240

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql redolog 详解_MySQL系列之redo log、undo log和binlog详解

事务的实现redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。InnoDB存储引擎体系结构redo logWrite Ahead Log策略事务提交时,先写重做日志再修改页;当由于发生宕机而导致数据丢失时,就可以通过重做日志来完成数据的恢复。InnoDB首先将重做日志信息先放到重做日志缓存按一定频率刷新到重做日志文件重做日志文件: 在默认情况,InnoDB存储引擎的...

weixin_39622123的博客 215

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql redolog 详解_深入理解MySQL系列之redo log、undo log和binlog

事务的实现redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。InnoDB存储引擎体系结构redo logWrite Ahead Log策略事务提交时,先写重做日志再修改页;当由于发生宕机而导致数据丢失时,就可以通过重做日志来完成数据的恢复。InnoDB首先将重做日志信息先放到重做日志缓存按一定频率刷新到重做日志文件重做日志文件: 在默认情况,InnoDB存储引擎的...

weixin_28941265的博客 353

MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝

深入了解核心存储引擎undoLog、redoLog、binLog日志三宝核心要点,并通过一条更新sql执行过程,来详细了解这三者的生成,以及结合一些故障场景参数配置了解他们的意义。

拉丁解牛技术专栏 1127

MYSQL面试系列-04

mysql 面试

king01299的博客 1403

MYSQL面试系列-02

innodb引擎的几大特性

king01299的博客 600

MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集

本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。

拉丁解牛技术专栏 1208

MySQL三大日志——binlog、redoLog、undoLog详解

我们都知道,事务的四大特性里面有一个是持久性,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面: 1)、 因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了! 2)、 一个事务可能涉及修改多个数据页,并

想着百万年薪努力的小赵 5万+

【重学MySQL】redolog & binlog

MySQL通过BufferPool提高读写性能,将磁盘数据缓存在内存中。为避免断电导致数据丢失,引入redo log记录修改操作(WAL技术)。redo log是循环写入的物理日志,确保crash-safe能力;binlog是追加写入的逻辑日志,用于备份和主从复制。更新数据时采用两阶段提交:先写redo log(prepare状态),再写binlog,最后提交事务。异常重启时,通过检查redo log和binlog的XID决定回滚或提交。定期全量备份+binlog可实现任意时间点恢复,备份频率取决于业务重要

先做到 再看见 1900

【MySQL】RedoLog日志和Binlog日志哪个先写的问题?

1.自动为每个事务分配一个唯一的ID(XID)。这个ID很重要,是两阶段提交的核心2.COMMIT会被自动的分成Prepare和Commit两个阶段3.Binlog会被当作事务协调者(Transaction Coordinator) Binlog Event会被当作协调者日志binlog在2PC中充当了事务的协调者(Transaction Coordinator)由binlog来通知InnoDB引擎来执行prepare,commit或者rollback的步骤。

Cover_sky的博客 1461
上一篇: MYSQL系列之 change buffer 和 redo log
下一篇: MYSQL系列之 索引的概念
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值