MySQL中undo log、redo log、bin log相关知识

从Maya到Unity:3D模型导入全流程避坑指南(含FBX导出设置) 本文详细解析了从Maya导出3D模型至Unity的全流程,重点剖析了FBX格式作为跨软件协作“中间人”的优劣与核心设置。指南涵盖了Maya端模型清理、FBX导出关键配置(如嵌入媒体、轴转换),以及Unity端的模型、材质、动画导入优化与常见问题(如材质丢失、UV法线错误、骨骼动画错乱)的实战解决方案,旨在帮助3D美术师与技术美术建立稳定、高效的工作流。 阅读详情

undo log

基本概念

  • undo log是一种用于撤销回退的日志,在数据库事务开始之前,MySQL会先记录更新前的数据到undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用undo log来进行回退。
  • undo log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。

注意:undo log也会产生redo log,因为undo log也要实现持久性保护。

作用

  1. 提供回滚操作【undolog实现事务的原子性】

在数据修改的时候,不仅记录了redo log,还记录了相对应的undo log,如果因为某些原因导致事务执行失败了,可以借助undolog进行回滚。
undolog和redolog 记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undolog中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。

  1. 提供多版本控制【undolog实现多版本并发控制(MVCC)】

MVCC,即多版本控制。在MySQL数据库InnoDB存储引擎中,用undoLog来实现多版本并发控制(MVCC)。当读取的某一行被其他事务锁定时,它可以从undolog中分析出该行记录以前的数据版本是怎样的,从而让用户能够读取到当前事务操作之前的数据【快照读】。

redo log

基本概念

  • InnoDB引擎对数据的更新,是先将更新记录写入redolog日志,然后会在系统空闲的时候或者是按照设定的更新策略再将日志中的内容更新到磁盘之中。这就是所谓的预写式技术(Write Ahead logging)。这种技术可以大大减少IO操作的频率,提升数据刷新的效率。
  • redo log:被称作重做日志,包括两部分:一个是内存中的日志缓冲:redo log buffer,另一个是磁盘上的日志文件:redo Log file。

作用

Mysql每执行一条DML语句,先将记录写入redolog buffer。后续某个时间点再一次性将多个操作记录写到 redo log file。当故障发生致使内存数据丢失后,InnoDB会在重启时,经过重放 redo,将Page恢复到崩溃之前的状态通过Redo log可以实现事务的持久性。

binlog

基本概念

  • binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是不会记录SELECT和SHOW这类操作。
  • binlog在MySQL的Server层实现(引擎共用)
  • binlog为逻辑日志,记录的是一条SQL语句的原始逻辑
    • binlog不限制大小,追加写入,不会覆盖以前的日志.
    • 默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysglbinlog解析查看。

作用

  1. 主从复制:主库中开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到Binlog后实现数据恢复达到主从数据一致性。
  2. 数据恢复:通过mysqlbinlog工具来恢复数据。

redo log和undo log的持久化策略

redo log持久化

缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统缓冲区(OS Buffer)。因此,redo log buffer写入redo log file实际上是先写入OSBuffer,然后再通过系统调用fsync()将其刷到redo log file.
Redo Buffer 持久化到 redo log 的策略,可通过 Innodb_flush_log_at_trx_commit 设置:
image.png
image.png
一般建议选择取值2,因为MySQL挂了数据没有损失,整个服务器挂了才会损失1秒的事务提交数据。

undo log持久化

MySQL中的UndoLog严格的讲不是Log,而是数据,因此他的管理和落盘都跟数据是一样的:

  • undo log的磁盘结构并不是顺序的,而是像数据一样按Page管理
  • undo写入时,也像数据一样产生对应的RedoLog(因为undo也是对页面的修改,记录undo这个操作本身也会有对应的redo)。
  • undo的Page也像数据一样缓存在Buffer Pool中,跟数据Page一起做LRU换入换出,以及刷脏。Undo Page的刷脏也像数据一样要等到对应的RedoLog落盘之后

当事务提交的时候,innodb不会立即删除undolog,因为后续还可能会用到undolog,如隔离级别为repeatableread时,事务读取的都是开启事务时的最新提交行版本,只要该事务不结束,该行版本就不能删除,即undo log不能删除。
但是在事务提交的时候,会将该事务对应的undolog放入到删除列表中,未来通过purge来删除。并且提交事务时,还会判断undo log分配的页是否可以重用,如果可以重用,则会分配给后面来的事务,避免为每个独立的事务分配独立的undolog页而浪费存储空间和性能。

binlog和redo log的区别

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
  2. redo log是物理日志,记录的是“在xxx数据页上做了xxx修改";binlog是逻辑日志,记录的是原始逻辑,其记录是对应的SQL语句。(比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新;)
    1. 物理日志:记录的是每一个page页中具体存储的值是多少,在这个数据页上做了什么修改.比如:某个事物将系统表空间中的第100个页面中偏移量为1000处的那个字节的值1改为2.
    2. 逻辑日志:记录的是每一个page页面中具体数据是怎么变动的,它会记录一个变动的过程或SQL语句的逻辑,比如:把一个page页中的一数据从1改为2,再从2改为3,逻辑日志就会记录1->2,2->3这个数据变化的过程.
  3. redo log是循环写的,空间一定会用完,需要writepos和checkpoint搭配;binlog是追加写,写到一定大小会切换到下一个,并不会覆盖以前的日志。
  • redo Log文件内容是以顺序循环的方式写入文件,写满时则回溯到第一个文件,进行覆盖写。

image.png

  • write pos:表示日志当前记录的位置,当ib_logfile_4写满后,会从ib_logfile_1从头开始记录;
  • checkpoint:表示将日志记录的修改写进磁盘,完成数据落盘,数据落盘后checkpoint会将日志上的相关记录擦除掉,即 write pos->checkpoint 之间的部分是redo log空着的部分,用于记录新的记录,checkpoint->writepos之间是redolog待落盘的数据修改记录.
  • 如果write pos追上checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint 推进一下。
  1. redo Log作为服务器异常岩机后事务数据自动恢复使用,Binlog可以作为主从复制和数据恢复使用。Binlog没有自动crash-safe能力。

CrashSafe指MySQL服务器宕机重启后,能够保证

  • 所有已经提交的事务的数据仍然存在。
  • 所有没有提交的事务的数据自动回滚。

binlog 有几种日志格式,有什么区别?

  1. ROW(row-based replication,RBR):日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。
  • 优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。而且不会出现某些特定情况下存储过程或function无法被正确复制的问题。
  • 缺点:批量操作,会产生大量的日志,尤其是alter table会让日志量暴涨。
  1. STATMENT(statement-based replication,SBR):记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事),slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。
  • 优点:日志量小,减少磁盘IO,提升存储和恢复速度
  • 缺点:在某些情况下会导致主从数据不一致,比如last_insert_id0、now()等函数.

ROW和STATEMENT格式的区别如下图:
image.png

  1. MIXED(mixed-basedreplication,MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择写入模式。
麒麟V10 x86_64系统下Qt 5.12.7安装全攻略(附常见报错解决方案) 本文详细介绍了在麒麟V10 x86_64系统上安装Qt 5.12.7的完整流程,包括在线和离线两种安装方案,并提供了常见报错的解决方案。从环境准备到项目配置优化,再到高级调试技巧,全面覆盖Qt开发在国产操作系统上的实践要点,帮助开发者高效搭建开发环境。 阅读详情

相关推荐

实战分享:一文读懂RS-232总线

RS-232标准接口(又称EIARS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic IndustryAssociation,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。

阿荣嵌入式 8519

Mysql------undo log

undo log

weixin_43743711的博客 1057

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3921

MySQL回滚日志(undo log)的作用和使用详解

目录。

glenshappy的专栏 4558

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

【数据结构】考点二十八 : 二叉树的概念:二叉树的度、完全二叉树、满二叉数结点数、哈夫曼结点数、完全二叉树的深度

二叉树(Binary Tree)是一种常见的数据结构,它或者为空(null),或者由一个根节点(root node)和两个子树(left subtree 和 right subtree)组成,这两个子树又分别是一棵二叉树。二叉树的每个节点最多有两个子节点,通常称为左子节点(left child)和右子节点(right child)。

超越的博客 1738

undo撤销日志

可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的 update记录。Undo log存储:undo log采用段的方式进行管理和记录,存放在前面介绍的 rollback segment 回滚段中,内部包含1024个undo log segment。Undo log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。

weiwoyuexiaxian的博客 456

Linux ARM平台开发系列讲解(LED) 2.1.1 如何点亮一个LED之添加设备树信息

1. 设备树添加设备信息 我拿到的开发板上有两颗LED供用户编程使用,分别是GPIO5_IO8和GPIO5_IO9,设备信息如下,不同板子的设备定义不同,根据自己的实际情况进行添加。 2. 编译设备树 根据自己拿到的SDK,执行编译命令,我这里拿到的SDK编译脚本为: ./build.sh kernel 3. 使用uuu工具烧录新编译好的内核 因为imx8 SDK设备树和内核是统一编译成一个镜像,所以只需要烧录内核,设备树文件也会烧录。 sudo uuu -b emmc imx-kernel.bin

DSMGUOGUO的博客 920

undolog日志

记录的回滚操作,也称之为`回滚日志`;所以在更新一条记录时,不仅会产生 `redolog`,`binlog`日志,还会产生`undolog`日志; mvcc多版本并发控制

weixin_45683550的博客 1858

1、基于改进3D卷积神经网络的阿尔茨海默病分类

本文提出了一种基于改进3D卷积神经网络的阿尔茨海默病(AD)分类方法,利用3D CNN对预处理后的T1加权MRI数据进行空间特征提取,并在VGG网络结构中引入类似ResNet的跳跃连接以缓解模型退化和过拟合问题。实验基于ADNI数据集,包含AD、MCI和NC三类样本,结果表明改进后的3D VGG模型在AD/NC、MCI/NC及多分类任务中均取得了优异性能,尤其在AD/MCI/NC分类中准确率达到98.50%,优于现有典型3D深度学习方法。研究验证了3D CNN在脑部疾病诊断中的有效性,并为AD的早期识别提供

kk1234的博客 90

PyCharm 怎么不升级直接使用Jupyter Notebook

在PyCharm 中需要升级到 PyCharm Professional 版本,才能直接使用 Jupyter Notebook。从截图来看,Jupyter Notebook 已经成功启动,并且正在运行。这将在默认网络浏览器中打开一个新的标签页,显示文件浏览器界面。可以在这里创建和编辑。文件添加到 PyCharm 项目中,并使用纯文本编辑功能进行修改。支持与外部工具集成,可以配置它以调用命令行工具或脚本来启动。,参数可以根据需要设置,工作目录设置为项目根目录。,你仍然可以在本地环境中安装和运行。

Davina_yu的博客 996

MySQL高级篇知识点——MySQL 事务日志

MySQL 事务日志

代码星辰的博客 4392

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

【MySQL】日志篇,介绍一下redo log,undo log,bin long,buffer pool

我们介绍了在MySQL,InnoDB引擎进行增删查改操作时,用到的日志(如果文章有误,欢迎搭建批评指正)创作不易,大家的支持就是我坚持下去的动力!博主正在努力创作中。

2401_87293733的博客 886

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MySQL事务底层与高可用原理

Redo Log 保证事务的持久性Undo Log保证事务的原子性。

qq_45442497的博客 467

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【每日八股】复习 MySQL Day4:日志(一)

对 MySQL 日志部分的知识进行学习和整理,主要包括 MySQL InnoDB 数据引擎下三大日志 binlog、undo log 和 redo log。

YGGP的博客 1345

pb 执行insert 后return是否会自动提交_面试官:一条MySQL更新语句是如何执行的?...

在面试中面试中如果被面试官问到在MySQL中一条更新语句是怎么执行的?,下面让我们来探究一下!流程图这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤。执行流程:1.连接验证及解析客户端与MySQL Server建立连接,发送语句给MySQL Server,接收到后会针对这条语句创建一个解析树,然后进行优化,(解析器知道语句是要执行什么,会评估使用各种索引的代价,...

weixin_39569543的博客 65

asscess 一条记录更新数据_面试官:一条MySQL更新语句是如何执行的?

在面试中面试中如果被面试官问到在MySQL中一条更新语句是怎么执行的?,下面让我们来探究一下!流程图这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤。执行流程:1.连接验证及解析客户端与MySQL Server建立连接,发送语句给MySQL Server,接收到后会针对这条语句创建一个解析树,然后进行优化,(解析器知道语句是要执行什么,会评估使用各种索引的代价,...

weixin_31139479的博客 118

mysql进阶-下

二进制日志(binnary log)以【事件形式】记录了对MySQL数据库执行更改的所有操作。binlog记录了所有数据库【表结构】变更(例如CREATE、ALTER TABLE…)以及【表数据】修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。binlog是mysql server层维护的,跟采用何种引擎没有关系,记录的是所有的更新操作的日志记录。

qq_33934592的博客 2290

MySQL 的 undo log、redo log、bin log

MySQL的日志系统是其确保数据可靠性和持久性的核心,主要包括undo log、redo log和binlog。undo log用于事务回滚和多版本并发控制(MVCC),记录数据修改前的状态,存储在回滚段中。redo log是InnoDB的物理日志,确保事务的持久性,通过WAL机制提高性能,采用循环写入方式。binlog是服务器层的逻辑日志,用于主从复制、数据恢复和审计,记录所有数据库修改操作。三种日志在层次、记录内容和功能上各有不同,但协同工作保障了数据库的ACID特性。此外,MySQL通过两阶段提交机制

guixian001的博客 1755

Mysql高频八股——事务与undo log、bin log、redo log的联系(超干干货)

今天咱们接着上一篇的内容,聊一聊MySQL中事务与redo log、bin log、undo log之间那些你可能不太懂、但面试又经常问到的问题。比如事务的ACID特性具体怎么实现啦,为什么每次提交事务要先刷新redo log而不是直接刷脏页啦,还有没提交事务的redo log是不是也可能提前落盘呢? 放心吧,这些看似复杂的问题,我会一点点掰开揉碎了放到“事务与redo log、bin log、undo log的联系”这个大框架里给你讲清楚,看完这篇文章,你再去面试的时候绝对可以轻松应对面试官的各种拷问啦!

weixin_49426115的博客 1805

【数据库】MySQL中bin log、redo log、undo log详解

MySQL中,查询一条数据,会将该数据相关页的所有数据一次性加载出来,放入 中,后续都是从中进行查找;对数据做修改时,如果数据在中存在,则直接更新里面数据,然后将更新操作记录到 中,等待合适时间刷新到redo log 文件中。redo log的日志文件是以日志文件组的形式出现的,每个redo日志文件大小都是一样的,采用环形数组的形式,从头开始写,写到结尾继续从头开始写。日志文件组中有两个重要的属性当redo log记录到日志文件组中,向后推移MySQL从日志文件组中恢复数据时,会清空加载过得redo log

此木博客 1495

深入解析MySQL日志四剑客:Undo Log、Redo Log、Bin Log与Relay Log

MySQL日志体系由Undo LogRedo LogBin Log和Relay LogUndo Log:记录数据的原始值,用于事务回滚和多版本并发控制(MVCC),支持事务隔离性和一致性。Redo Log:记录物理变更,用于数据持久化和崩溃恢复,保证了事务的持久性。Bin Log:记录逻辑变更,用于数据恢复、主从复制和数据审计,支持数据一致性和备份恢复。Relay Log:从库生成的本地日志,用于主从复制,提升了分布式架构下的高可用性。

hello.reader 1503

Mysql架构之日志讲解:redo log,undo log,bin log 日志

讲日志之前,我们要先认识一下buffer pool缓冲区。mysql想完成数据的修改,会先从存储引擎层读取数据,把数据读取到服务层进行数据的修改,再通过存储引擎层把数据更新到数据库中。mysql每次读取数据都会读取16384个字节的数据,默认是16KB的数据。一页的数据。在innodb引擎中设计了 buffer pool 缓冲区。Mysql从磁盘中通过IO读取数据到buffer pool中,引擎从buffer pool中获取数据,然后修改,再把数据写入到buffer pool中。从而完成读写的操作,因为是基

m0_63475488的博客 793

【mysql】-- Mysql的undo log、redo log、bin log日志

这里写自定义目录标题一、mysql的日志文件二、undo log日志--InnoDB特有2.1、undo log日志介绍2.2、undo log原理2.3、insert操作的内部机制2.4、delete/update操作的内部机制三、redo log日志--InnoDB特有3.1、redo log文件存在意义3.2、redo log原理3.3、write ahead Log策略3.4、 redolog的覆盖和innodb_log_buffer刷入磁盘参数配置3.5、redolog的数据恢复策略四、bin l

寻梦友的博客 961

MySQL中的redo log、undo log、bin log

这个和磁盘的扇区有关,机械磁盘默认的扇区就是512字节,如果你要写入的数据大于512字节,那么要写入的扇区肯定不止一个,这时就要涉及到盘片的转动,找到下一一个扇区,假设现在需要写入两个扇区A和B,如果扇区A写入成功,而扇区B写入失败,那么就会出现。可以发现每次对数据的变更都会产生一个undo log,当一条记录被变更多次时,那么就会产生多条undo log,undo log记录的是变更前的日志,并且每个undo log的序号是递增的,那么当要回滚的时候,按照序号。.........

qq_53578500的博客 1298

(十一)MySQL日志篇之undo-log、redo-log、bin-log.....傻傻分不清!

叨叨絮絮下来,就大致将MySQL中的一些常见、较为重要的日志讲明白啦,其实重点搞清楚undo-log:主要用于实现事务ACID原则中的原子性和MVCC机制。redo-log:主要用于实现事务原则中的持久性,确保事务提交后就不会丢失。bin-log:主要结合redo-log实现事务原则中的一致性,确保事务提交前后,数据的一致。对于其他几类日志,在本篇中也仅讲明了大概,毕竟后面的章节中会再出现,而对于上述三大日志也就基本上不会提到了,因此剖析的较为全面,那么咱们下篇见~,下面准备讲:《MySQL。

weixin_54542328的博客 1272
上一篇: Java函数式编程-Stream流
ccwpp
博客等级 码龄7年 62粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值