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

mysql-binlog,redolog 和 undolog区别

binlog

MySQL的binlog(二进制日志 或 归档日志)是一种记录数据库的更改操作的日志。它包含了对数据库进行的插入、更新和删除操作的详细信息。binlog是以二进制格式存储,可以用于恢复数据库、数据复制和数据同步等操作。具体来说,binlog记录了每个更改操作的SQL语句或数据修改内容,也被称为归档日志。

binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog 是 mysql的逻辑日志,并且由 Server 层进行记录,使用任何存储引擎的 mysql 数据库都会记录 binlog 日志。binlog 是通过追加的方式进行写入的,可以通过max_binlog_size 参数设置每个 binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

  • 逻辑日志:可以简单理解为记录的就是sql语句 。
  • 物理日志mysql 数据最终是保存在数据页中的,物理日志记录的就是数据页变更

binlog使用场景

在实际应用中, binlog 的主要使用场景有两个,分别是 主从复制 和 数据恢复 。

  1. 主从复制 :在 Master 端开启 binlog ,然后将 binlog发送到各个 Slave 端, Slave 端重放 binlog 从而达到主从数据一致。
  2. 数据恢复 :通过使用 mysqlbinlog 工具来恢复数据。

redolog

Redo log(重做日志)是InnoDB存储引擎特有的日志文件,用于在崩溃恢复时对未提交事务进行恢复。它记录了每次数据修改操作的物理日志,包括InnoDB的数据页修改、索引页修改、插入缓冲(insert buffer)等。Redo log的作用是确保事务在提交后持久化到磁盘上。

为什么需要redo log

我们都知道,事务的四大特性里面有一个是 持久性 ,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态 。

那么 mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面:

  1. 因为 Innodb 是以  为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了!
  2. 一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机IO写入性能太差!

因此 mysql 设计了 redo log , 具体来说就是只记录事务对数据页做了哪些修改,这样就能完美地解决性能问题了(相对而言文件更小并且是顺序IO)。

Undo log

Undo log(撤销日志)是InnoDB存储引擎特有的日志文件,用于在事务回滚或并发控制等操作时恢复数据的一致性。Undo log记录了事务执行过程中每个数据修改的反向操作,可以用于撤销未提交事务或回滚已提交事务,并且在MVCC(多版本并发控制)中起到了重要作用。

数据库事务四大特性中有一个是 原子性 ,具体来说就是 原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。实际上, 原子性 底层就是通过 undo log 实现的。undo log主要记录了数据的逻辑变化,比如一条 INSERT 语句,对应一条DELETE 的 undo log ,对于每个 UPDATE 语句,对应一条相反的 UPDATE 的 undo log ,这样在发生错误时,就能回滚到事务之前的数据状态。同时, undo log 也是 MVCC(多版本并发控制)实现的关键。

相关文章:

mysql-binlog,redolog 和 undolog区别

binlog MySQL的binlog(二进制日志 或 归档日志)是一种记录数据库的更改操作的日志。它包含了对数据库进行的插入、更新和删除操作的详细信息。binlog是以二进制格式存储,可以用于恢复数据库、数据复制和数据同步等操作。具体来说&#xff0c…...

Redis SDS 源码

struct sdshdr {int len;int free;char buf[]; }; 底层数据结构的好处: 杜绝缓冲区溢出。减少修改字符串长度时所需的内存重分配次数。二进制安全。兼容部分C字符串函数。 常用命令: set key value、get key 等 应用场景:共享 session、分…...

肖sir__mysql之单表练习题2__(2)

mysql之单表练习题 一.建表语句 create table grade(class int(4),chinese int(8),english int(4),math int(8),name varchar(20),age int(8),sid int(4)primary key auto_increment) DEFAULT charsetutf8; insert into grade(class,chinese,english,math,name,age)values(1833…...

nuxt、vue实现PDF和视频文件的上传、下载、预览

上传 上传页面 <el-form-item :label"(form.ququ3 1 ? 参培 : form.ququ3 2 ? 授课 : ) 证明材料" prop"ququ6"><PdfUpload v-model"form.ququ6" :fileType"[pdf, mp4, avi, ts]"></PdfUpload> </el-form-i…...

c++ 写成.h .cpp main.cpp 多文件形式

1 .h 声明方法/函数 用于连接定义和实例使用 // max.h #ifndef MAX_H #define MAX_Hint max(int a, int b);#endif /* 在#ifndef和#define中使用的MAX_H就是指的max.h这个头文件的名字。具体来说,#ifndef MAX_H中MAX_H代表了max.h这个头文件的一个唯一的标识符。#define MAX_H…...

组合总和(回溯)

题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 样例输入 示例 1: 输入: k 3, n 7 …...

【代码】微电网两阶段鲁棒优化经济调度方法(完美复现)matlab-yalmip-cplex/gurobi

程序名称&#xff1a;两阶段鲁棒优化—微电网两阶段鲁棒优化经济调度方法_刘一欣 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 简介&#xff1a;针对微电网内可再生能源和负荷的不确定性&#xff0c;建立了 min-max-min 结构的两阶段鲁棒优化模型&#xff0c;可得到最恶…...

关于无线测温系统在海上石油平台的应用探讨-安科瑞 蒋静

摘要&#xff1a;海上石油平台的封闭式中高压配电盘在平台电力系统起着十分重要的作用&#xff0c;通过统计其配电盘的 大部分故障为前期的热效应引起&#xff0c;由于配电盘内部空间封闭狭小&#xff0c;所以无法进行人工巡查测温&#xff0c;这给油田的供电系统埋下了一定的潜…...

CSS 滚动捕获 scroll-padding

scroll-padding 非滚动捕获容器滚动捕获容器语法兼容性 CSS 滚动捕获 scroll-padding 设置元素的滚动内边距, 就像 padding 所做的那样. 但并不影响布局. 非滚动捕获容器 我们先来看看不影响布局到底是什么意思. 我们平时会见到左侧是内容, 右侧是内容导航的页面, 比如下图 这…...

asp.net core webpi 结合jwt实现登录鉴权

1.安装jwt nuget包 <PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"System.IdentityModel.Tokens.Jwt" Version"7.0.3" />1.1创建jwt配置类 n…...

【香橙派】实战记录2——烧录安卓镜像及基本功能

文章目录 一、安卓烧录二、安卓基本功能1、蓝牙2、相机功能3、投屏 一、安卓烧录 检查环境&#xff1a;检查PC系统&#xff0c;确保有Microsoft Visual C 2008 Redistrbutable - x86&#xff0c;否则在官网下载的官方工具 - 安卓镜像烧录工具里运行vcredist_x86.exe。 插入存储…...

【spring(六)】WebSocket网络传输协议

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 核心概要&#xff1a; 概念介绍&#xff1a; 对比HTTP协议&#xff1a;⭐ WebSocket入门案例&#xff1a;⭐ 核心概要&#xff1a; websocket对比http 概念介绍&#xff1a; WebSocket是Web服务器的一个组件…...

MidJourney笔记(6)-Niji模式

Niji模式 回顾一下,在讲解settings命令时,我们可以看到一个Niji字眼。 而且是在Midjourney V4之后才有的,那Niji到底是什么? Niji是MidJourney中用于绘制二次元/动漫风格的模型,那Niji的V4和V5有什么区别呢?...

Linux命令(139)之ab

linux命令之ab 1.ab介绍 linux命令ab(E.g:apachebench)是apache自带的压力测试工具。ab命令会创建多个并发访问线程&#xff0c;模拟多个访问者同时对某一URL进行访问。由于ab命令测试是基于URL的&#xff0c;因此&#xff0c;它既可以用来测试apache httpd的负载压力&#x…...

笔记----单纯剖分----1

笔记----单纯剖分 定义 线性组合仿射组合&#xff1a; 线性组合的系数为1凸组合&#xff1a; 仿射组合所有的系数都是正数 凸集 R^m 的 任意有限个点的凸组合仍在其中的子集仿射子空间 R^m 的 任意有限个点的仿射组合仍在其中的子集凸包 conv(A) A是R^m的一个子集 A的所有有限凸…...

mybatis源码(五)springboot pagehelper实现查询分页

1、背景 springboot的pagehelper插件能够实现对mybatis查询的分页管理&#xff0c;而且在使用时只需要提前声明即可&#xff0c;不需要修改已有的查询语句。使用如下&#xff1a; 之前对这个功能一直很感兴趣&#xff0c;但是一直没完整看过&#xff0c;今天准备详细梳理下。按…...

【BUG】SpringBoot项目Long类型数据返回前端精度丢失问题

问题描述 后端再给前端返回数据&#xff0c;使用Long类型的时候存在精度丢失问题。 原因分析&#xff1a; 分布式项目中广泛使用雪花算法生成ID作为数据库表的主键&#xff0c;Long类型的雪花ID有19位&#xff0c;而前端接收Long类型用的是number类型&#xff0c;但是number…...

UI自动化Selenium find_elements和find_element的区别

# 如果获取的element是list&#xff0c;那么需要用find_elements方法&#xff1b;此方法会返回list&#xff0c;然后使用len() 方法&#xff0c;计算对象的个数&#xff1b; # find_element方法返回的不是list对象&#xff0c;所以导致没办法计算对象个数 # 1.返回值类型不同…...

【Android】Window和WindowManager

文章目录 理解Window和WindowManagerWindow和WindowManagerWindow的内部机制Window的添加过程Window的删除过程Window的更新过程 Window的创建过程Activity的Window创建过程Dialog的Window创建过程Toast的Window创建过程 理解Window和WindowManager Window是一个抽象类&#xf…...

如何解决 Python ModuleNotFoundError 错误

模块对于开发 Python 程序很重要。 使用模块&#xff0c;我们可以分离代码库的不同部分以便于管理。 使用模块时&#xff0c;了解它们的工作方式以及如何将它们导入我们的代码非常重要。 如果没有这种理解或错误&#xff0c;我们可能会遇到不同的错误。 此类错误的一个示例是…...

终极指南:PDFMiner XML输出如何高效提取结构化数据

终极指南&#xff1a;PDFMiner XML输出如何高效提取结构化数据 【免费下载链接】pdfminer Python PDF Parser (Not actively maintained). Check out pdfminer.six. 项目地址: https://gitcode.com/gh_mirrors/pd/pdfminer PDFMiner是一个强大的Python PDF解析库&#x…...

终极指南:gradle-retrolambda在大型项目中的性能优化与稳定性保障策略

终极指南&#xff1a;gradle-retrolambda在大型项目中的性能优化与稳定性保障策略 【免费下载链接】gradle-retrolambda evant/gradle-retrolambda: gradle-retrolambda 插件允许开发者在 Android 项目中使用 Java 8 的 Lambda 表达式和其他现代语言特性&#xff0c;并通过 Ret…...

OpenClaw技能开发:为千问3.5-9B编写自定义自动化模块

OpenClaw技能开发&#xff1a;为千问3.5-9B编写自定义自动化模块 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理日报时&#xff0c;发现现有的技能库无法满足我的特殊需求——需要从Jira提取数据后&#xff0c;自动生成符合团…...

深夜调车的时候突然发现,Apollo的泊车轨迹优化藏着不少“骚操作“。咱们今天不聊虚的,直接扒开代码看三个核心模块怎么打架...哦不,怎么配合的

apollo 泊车轨迹优化代码 hybridastariaps平滑优化obca平滑优化 第一个图是matlab绘制 后面的图是程序用sdl库绘制先看Hybrid A*这个愣头青。这货生成的轨迹就像刚拿驾照的新手&#xff0c;能避开障碍物但轨迹拧巴得很。看看它扩展节点的代码片段&#xff1a; Node3D* expand(…...

【Pygame】第15章 游戏人工智能基础、行为控制与寻路算法实现

摘要 人工智能是游戏开发中的重要组成部分&#xff0c;它能够赋予非玩家角色更自然的行为表现&#xff0c;使游戏世界显得更加真实、生动&#xff0c;并且具有挑战性。 在 2D 游戏中&#xff0c;AI 通常并不追求真正意义上的“智能”&#xff0c;而是通过一系列规则、状态和算…...

技术创业中的产品迭代:从内核开发到用户中心

技术创业中的产品迭代&#xff1a;从内核开发到用户中心 产品迭代的重要性 作为一名从Linux内核开发者转型产品经理再到科技创业者的人&#xff0c;我深刻体会到产品迭代在技术创业中的重要性。一个成功的产品不是一蹴而就的&#xff0c;而是通过不断的迭代和优化逐步发展起来的…...

DAY4--SQL限制返回行数查询

SQL基础入门&#xff1a;电商用户数据限制返回行数查询实操 这一章能解决什么电商工作问题&#xff1f; 这一章要学的LIMIT&#xff0c;是我认为电商数据分析新人最应该刻进肌肉记忆的语法。因为它直接关系到两件事&#xff1a;你的工作效率&#xff0c;以及你的职场安全。 我先…...

基于深度学习的车牌识别系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)

摘要随着智能交通系统的迅猛发展&#xff0c;车牌识别技术在交通管理、停车场管理和公共安全等领域的应用愈加广泛。传统的车牌识别方法多依赖于图像处理技术&#xff0c;无法有效应对复杂环境下的车牌识别任务。为了解决这一问题&#xff0c;本文提出了一种基于深度学习的车牌…...

ISO-SLAM-seq:全长 RNA代谢测序服务

ISO-SLAM-seq 技术&#xff0c;是 SLAM-seq 与 ISO-seq 的结合&#xff0c;通过研发成熟的核苷类似物 4-硫尿苷 (S4U) 代谢 RNA 标记方法和基于 Oxford Nanopore Technology 纳米孔测序平台或者 PacBio 的三代全长转录组测序方法&#xff0c;ISO-SLAM-seq 能检测整合到总 RNA 中…...

丧尸危机模拟:灾备系统的终极压力测试

对于软件测试从业者而言&#xff0c;压力测试早已是日常工作的一部分。我们习惯于用并发用户数、吞吐量、响应时间等冰冷指标&#xff0c;去描绘一个系统在极限负载下的“抗压能力”。然而&#xff0c;当我们将这些概念投射到一个更宏大、更富有冲击力的隐喻——丧尸危机之中时…...