MySQL的三种重要的日志
日志
Mysql有三大日志系统
-
Undo Log(回滚日志):记录修改前的数据,用于事务回滚和 MVCC(多版本并发控制)。
-
Redo Log(重做日志):记录数据变更,用于崩溃恢复,确保持久性。
-
Binlog(备份日志):记录事务操作日志,用于主从复制和灾难恢复。
Redo Log
Redo Log 记录的是物理日志,也就是磁盘数据页的修改(Redo Log 记录了哪些数据被修改,以及修改前后的数据内容。包括被修改的数据页或块的位置信息)
作用:用来保证服务崩溃后,仍能把事务中变更的数据持久化到磁盘上
背景:当数据库对数据做修改时,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为脏数据,如果这个时候发生非正常的DB服务重启,那么这些数据还在内存,并没有同步到磁盘上,也就是发生数据丢失,那么这个时候使用redo log,在buffer pool的数据页变更结束后,就可以相应修改记录到这个文件,那么当DB服务发生崩溃宕机时,进行恢复DB时,可以根据文件的记录内容,重新持久化刷新到磁盘数据(redo log ,用于记录数据修改后的记录,顺序记录,主要用于数据的持久化操作。)、
组成:
-
redo log buffer日志缓存
重做日志缓存存在于内存中,容易发生丢失,先缓存数据,再一次性存入磁盘。
-
redo log file日志文件
存在于磁盘中,不容易发生丢失
redo log buffer是在内存中的,写入buffer后,并不会立即持久化到Redo log file,需要等待操作系统调用fsync操作(具体什么时候使用innodb_flush_log_at_trx_commit 参数配置)
参数值 | 含义 |
---|---|
0(延迟写) | 提交事务后,不会立即刷到OS Buffer中,而是等一秒后刷新到OS Buffer并调用fsync()写入Redo Log FIle,可能会丢失一秒钟的数据。 |
1(实时写 | 每次提交事务,都会刷新到OS Buffer并调用fsync()写到Redo Log FIle,性能较差 |
2(延迟刷新) | 每次提交事务只刷新到OS Buffer,一秒后再调用fsync()写入Redo Log FIle。 |
Undo Log
Undo Log回滚日志记录的是逻辑日志,也就是sql语句(比如当我们执行一条insert语句,Undo Log记录一条相反的delete语句--但它并不是简单地存储原始的SQL语句,而是存储相应的逆操作及相关的数据状态。这种设计使得回滚操作更直接和高效。)
作用:
-
回滚事务:当事务需要回滚时,数据库系统使用Undo Log来撤销事务已经执行的修改,恢复到事务开始之前的数据状态。
-
MVCC多版本控制:Undo Log在实现多版本并发控制(MVCC)中也起到关键作用。通过记录数据的历史版本,系统可以提供一致的读视图,支持并发事务的读取和修改。
组成:也是有undo buffer和undo logo日志组成
原理:如我们执行下面一条删除语句:
delete from user where id = 1;
那么此时undo log就会记录一条对应的insert语句(反向),以保证事务回滚时,将数据还原回去。
Undo log存储由InnoDB的存储引擎实现,数据保存再innoDB的数据文件中,再存储引擎中,undo log是采用分段的方式进行存储的。rollback segment称为回滚段。在MySQL5.5之后,可以支持128个rollback segment,分别从resg slot0 - resg slot127,每一个resg slot,也就是每一个回滚段,内部由1024个undo segment 组成,即总共可以记录128 * 1024个undo操作。
undo log日志存放的信息如下
-
undo log日志里面不仅存放着数据更新前的记录,还记录着RowID、事务ID、回滚指针,其中事务ID每次递增,回滚指针第一次如果是insert语句的话,回滚指针为null,第二次update之后undo log的回滚指针就会指向刚刚那一条undo log日志,以此类推形成了一条undo log的回滚链,便于找到该记录的历史版本
-
在事务提交之前会将数据备份到undo buffer,然后由undo buffer持久化到磁盘中的undo log文件中,此时undo log保存了之前未提交之前的操作日志,接着将操作的数据,持久化到数据文件中(更新数据前记录undo log)
例如:假设有A、B两个数据,值分别为1,2。
A. 事务开始
B. 记录A=1到undo log中
C. 修改A=3
D. 记录B=2到undo log中
E. 修改B=4
F. 将undo log写到磁盘 -------undo log持久化
G. 将数据写到磁盘 -------数据持久化
H. 事务提交 -------提交事务
Bin Log
Binlog 是 MySQL 中用于记录数据库修改操作的日志文件。binlog记录的是逻辑日志,即原始的sql语句,是mysql自带的。是mysql数据库中的二进制日志文件,用于记录数据库的所有更改操作。他以二进制的形式存储,包含了对数据库执行所有修改操作的详细信息,如插入、更新、删除等。BInlog是Mysql事务日志的一部分,与Redo log一起,确保数据库的一致性,持久性,以及提供一些关键的数据库管理功能。
作用
用于数据备份、主从同步、数据恢复
-
主从复制:在主从复制中,主服务器将所有的更改记录到Binlog中,而从服务器通过读取主服务器的Binlog并执行相同的更改来保持数据同步。这实现了数据的复制和冗余,提高了系统的可用性和可靠性。
-
数据库备份:Binlog也是数据库备份的一部分。通过备份Binlog,可以实现增量备份,只备份自上次完整备份以来发生的变更,从而减少备份的时间和存储成本。
-
数据恢复:在数据库崩溃或数据丢失时,可以使用 Binlog 进行数据恢复。通过重放 Binlog 中记录的所有操作,可以将数据库恢复到某个特定时间点。
组成
事件头(Event Header):
-
包含事件的时间戳、类型、服务器ID等信息。
事件数据(Event Data):
-
具体记录了对数据库表的修改操作。根据事件类型不同,事件数据也有所不同,比如可能是表结构变更、行数据修改等。
文件格式描述符(File Format Descriptor):
-
描述了 Binlog 文件的格式信息,通常在 Binlog 文件的开头。
Binlog 的类型
MySQL 的 Binlog 有三种格式:
-
STATEMENT(语句模式):
-
记录的是执行的 SQL 语句。优点是日志文件较小,缺点是某些非确定性的操作可能导致复制不一致。
-
记录原始SQL语句,会导致更新时间与原库不一致。 比如 update_time=now()
-
-
ROW(行模式):
-
记录的是每行数据被修改的具体信息。优点是可以确保复制的一致性,缺点是日志文件较大。
-
-
MIXED(混合模式):
-
结合了语句模式和行模式的优点。MySQL 自动选择最合适的格式记录日志。
-
Statement和Row的混合模式,默认采用Statement模式,涉及日期、函数相关的时候采用Row模式,既减少了数据量,又保证了数据一致性。
这时,MySQL并不会立即刷盘,而是依据
sync_binlog
参数决定刷盘的频率和时机。参数值 含义 0(延迟写) 每次提交事务都不会刷盘,由系统自己决定什么时候刷盘,可能会丢失数据。 1(实时写) 每次提交事务,都会刷盘,性能较差。 N(延迟写) 提交N个事务后,才会刷盘。 -
事务提交前刷盘过程
事务开始:
-
执行一组数据库操作,如插入、更新、删除等。
写入 Undo Log 缓冲区:
-
在执行修改操作之前,首先将修改前的记录写入 Undo Log 缓冲区。这一步骤确保了即使在事务失败或回滚时,可以恢复到修改前的状态。
写入Redo Log缓冲区:
-
同时,修改操作的Redo Log记录也写入内存中的Redo Log缓冲区。
写入 Binlog 缓冲区:
-
在执行这些操作的过程中,MySQL 会将这些操作记录在 Binlog 缓冲区中。
准备提交:
-
当事务准备提交时,MySQL 会将 Binlog 缓冲区的内容写入磁盘上的 Binlog 文件。这一步是为了确保即使在事务提交之后发生系统崩溃,事务的操作记录仍然可以从 Binlog 中恢复。
-
当事务准备提交时,MySQL会将Binlog缓冲区的内容写入到磁盘上的Binlog文件中。
这时,MySQL并不会立即刷盘,而是依据
sync_binlog
参数决定刷盘的频率和时机。
写入 Redo Log:
-
将事务的变更记录写入到 InnoDB 的 Redo Log 中。这也是在事务提交之前进行的,以确保数据的持久性。
-
根据
innodb_flush_log_at_trx_commit
参数的设置,决定是否立即将 Redo Log 刷盘到磁盘。
写入 Undo Log 文件:
-
在事务准备提交时,MySQL 会将 Undo Log 缓冲区的内容写入到磁盘上的 Undo Log 文件中,以确保事务的回滚信息持久化。
然后提交事务
相关文章:

MySQL的三种重要的日志
日志 Mysql有三大日志系统 Undo Log(回滚日志):记录修改前的数据,用于事务回滚和 MVCC(多版本并发控制)。 Redo Log(重做日志):记录数据变更,用于崩溃恢复&…...

神经网络学习2
张量(Tensor)是深度学习和科学计算中的基本数据结构,用于表示多维数组。张量可以看作是一个更广义的概念,涵盖了标量、向量、矩阵以及更高维度的数据结构。具体来说,张量的维度可以是以下几种形式: 标量&am…...

Spring Boot整合Redis通过Zset数据类型+定时任务实现延迟队列
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...

Android入门第69天-AndroidStudio中的Gradle使用国内镜像最强教程
背景 AndroidStudio默认连接的是dl.google的gadle仓库。 每次重新build时: 下载速度慢;等待了半天总时build faild;build到一半connection timeout;即使使用了魔法也难以一次build好;这严重影响了我们的学习、开发效率。 当前网络上的使用国内镜像的教程不全 网上的教程…...

深入浅出 Qt 中 QListView 的设计思想,并掌握大规模、高性能列表的实现方法
在大规模列表控件的显示需求中,必须解决2个问题才能获得较好的性能: 第一就是数据存在哪里, 避免出现数据的副本。第二就是如何展示Item,如何复用或避免创建大量的Item控件。 在QListView体系里,QAbstractListModel解…...

课设--学生成绩管理系统
欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…...

MySQL性能分析
一、查看执行频率 sql执行频率,执行下述指令可以看到select,update,delete等操作的次数 show global status like Com_______; 具体我们在终端登录mysql看下,使用下述命令登录mysql,并输入命令 mysql -u 用户名 -p 上述查询,删…...

为什么要学习Flink系统管理及优化课程?
Flink系统是一种流式处理框架,能够高效地处理大规模数据流。然而,要确保Flink系统的正常运行,就需要进行系统管理和优化。系统管理是指对Flink集群的监控、调度和维护,而系统优化则是指通过调整参数和优化算法,提高Fli…...
把本机的bash构建到docker镜像里面
最近突发奇想,想把本机的bash放到docker镜像里面,接下来看操作。 获取bash以及依赖 [rootbogon ~]# cat get_lib_info.sh #!/bin/bash# 函数:显示帮助信息 show_help() {echo "Usage: $(basename "$0") -h -f <file>…...

【数据分析】推断统计学及Python实现
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…...

探索交互的本质:从指令到界面的演进与Linux基础指令的深入剖析
目录 1.指令 vs 界面//选读 1.1交互的需求 满足需求的第一阶段-指令 满足需求的第二阶段-界面 1.2 指令 和 界面交互 区别 2.操作系统介绍 2.1 举例说明 驱动软件层 2.2 为什么要有操作系统? 0x03 为什么要进行指令操作? 3.Linux基本指令 l…...
uniapp vue分享功能集成
分享必须通过button设置open-type"share"拉起 <view class"img horizontal center" style"margin-right: 20rpx;"><image class"img" :src"src" click"onTapClick(xxx)" style"z-index: 1;" …...

软件工程实务:软件产品
目录 1、软件产品的基本概念 2、软件工程是什么? 为什么产生软件工程? 软件工程是做什么的? 3、定制软件和软件产品的工程比较 4 、软件产品的运行模式 5、软件产品开发时需要考虑的两个基本技术因素 6、产品愿景 7、软件产品管理 8、产品原型设计 9、小结…...

带侧边栏布局:带导航的网页
目录 任务描述 相关知识 HTML(HyperText Markup Language) CSS(Cascading Style Sheets): 编程要求 任务描述 在本关中,你的任务是创建一个带侧边栏和导航的网页布局。这种布局通常用于网站或应用程序,其中侧边栏…...
react学习-redux快速体验
1.redux是用于和react搭配使用的状态管理工具,类似于vue的vuex。redux可以不和任何框架绑定,独立使用 2.使用步骤 (1)定义一个reducer函数(根据当前想要做的修改返回一个新的状态) (2࿰…...

基于flask的网站如何使用https加密通信-问题记录
文章目录 项目场景:问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景: 项目场景:基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…...

记C#优化接口速度过程
前提摘要 首先这个项目是接手的前一任先写的项目,接手后,要求对项目一些速度相对较慢的接口进行优化,到第一个速度比较慢的接口后,发现单接口耗时4-8秒,是的,请求同一个接口,在参数不变的情况下…...

windows环境如何运行python/java后台服务器进程而不显示控制台窗口
1.通常我们在windows环境下使用Java或Python语言编写服务器程序,都希望他在后台运行,不要显示黑乎乎的控制台窗口: 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里,可是开机的…...

记周末百度云防御CC攻击事件
今天一早,收到百度智能云短信提醒,一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看,是否正常,看是否需要通知客户。 结果打开正常,看情况并没什么影响,那就等攻击结果了再看吧。 下午的时候&am…...
vue中v-bind控制class和style
当使用v-bind指令控制class和style时,可以通过动态绑定的方式根据不同的条件来添加或移除class,以及改变元素的样式。 1. 控制class 通过v-bind:class可以动态绑定class属性。可以使用对象语法、数组语法或者计算属性来实现。 对象语法:使用…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...