【MySQL是怎样运行的 | 第二篇】MySQL三大日志文件

文章目录
- 2.MySQL三大日志文件
- 2.1日志文件列表
- 2.1.1 redo log
- 2.1.2 bin log
- 2.1.3 undo log
- 2.2redo log日志详讲
- 2.3 binglog和redo log有什么区别?
- 2.4一条更新语句的执行过程
2.MySQL三大日志文件
2.1日志文件列表
- redo log:重做日志,记录了对于 InnoDB 表的每个写操作,不是 SQL 级别的,而是物理级别的,主要用于崩溃恢复
- undo log:回滚日志,记录数据被修改前的值,用于事务的回滚
- bin log:二进制日志,记录了所有修改数据库状态的 SQL 语句,以及每个语句的执行时间,如 INSERT、UPDATE、DELETE 等,但不包括 SELECT 和 SHOW 这类的操作
- slow query log:慢查询日志,记录执行时间超过 long_query_time 值的所有 SQL 语句。这个时间值是可配置的,默认情况下,慢查询日志功能是关闭的。可以用来识别和优化慢 SQL
- error log:错误日志,记录 MySQL 服务器启动、运行或停止时出现的问题
2.1.1 redo log
- redo log,重做日志
- 内容: 物理格式的日志,记录的是物理数据页面的修改的信息,其 redo log 是顺序写入 redo log file 的物理文件中去的
- 作用: 确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性
2.1.2 bin log
- bin log,二进制日志
- 内容: 所有执行增删改的SQL 语句,以及每个语句的执行时间,以便进行数据恢复和主从复制
- 作用: 用于复制,在主从复制中,从库利用主库上的 binlog 进行重播,实现主从同步。 用于数据库的基于时间点的还原
2.1.3 undo log
- undo log,回滚日志
- 内容: 逻辑格式的日志,在执行 undo 的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于 redo log 的
- 作用: 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
2.2redo log日志详讲
- 原因:mysql,如果每次更新操作都要写进磁盘,然后磁盘要找到对应记录,然后再更细,整个过程 io 成本、查找成本都很高
- 解决方案:WAL 技术(Write-Ahead Logging)。先写日志,再写磁盘
- 具体过程:
- 当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。
- 同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。
- InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写
2.3 binglog和redo log有什么区别?
- 文件级别不同:
- redo log 是 InnoDB 引擎特有的
- binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用
- 文件内容不同:
- redo log 是物理日志,记录的是 “在某个数据页上做了什么修改”
- binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如 “给 ID=2 这一行的 c 字段加 1
- 文件写入不同:
- redo log 是循环写的,空间固定会用完;
- binlog 是可以追加写入的。“追加写” 是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志
2.4一条更新语句的执行过程
- 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
- 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
- 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
- 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。、
- 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成

相关文章:
【MySQL是怎样运行的 | 第二篇】MySQL三大日志文件
文章目录 2.MySQL三大日志文件2.1日志文件列表2.1.1 redo log2.1.2 bin log2.1.3 undo log 2.2redo log日志详讲2.3 binglog和redo log有什么区别?2.4一条更新语句的执行过程 2.MySQL三大日志文件 2.1日志文件列表 redo log:重做日志,记录了…...
视图、存储过程、触发器
一、视图 视图是从一个或者几个基本表(或视图)导出的表。它与基 本表不同,是一个虚表,视图只能用来从查询,不能做增删改(虚拟的表) 1.创建视图 创建视图的语法: create view 视图名【view_xxx / v_xxx】 a…...
【学习笔记】解决Serial Communication Library编译问题
【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口,它的工作流程设计在外观和感觉上与 PySerial 相似,但串口速…...
在 Windows 环境下实现负载均衡:提升系统性能与可靠性的关键技术
Windows 环境下的负载均衡:提升系统性能与可靠性的关键技术 负载均衡(Load Balancing)是现代网络架构中不可或缺的一部分,通过将请求分配到多台服务器上来提高系统的性能和可靠性。本文将介绍在 Windows 环境下使用负载均衡的基本…...
【Linux】-----工具篇(自动化构建工具make/makefile)
目录 前言 一、是什么? 二、怎么样的? 三、原理及细节 图解代码 细节1:make工作规则 ①依赖文件存在 ②依赖文件不存在 ③依赖文件列表为空(特殊) .PHONY关键字 细节2:makefile识别程序需要重新编译? 四、…...
图的遍历:深度优先搜索(DFS)
引言 图遍历是指按照一定的顺序访问图中的每个顶点。遍历图的两种主要方法是深度优先搜索(Depth-First Search, DFS)和广度优先搜索(Breadth-First Search, BFS)。本文将详细介绍深度优先搜索的定义、算法及其实现。 深度优先搜…...
普元EOS学习笔记-某些版本的EOS提供的maven获取依赖失败的问题解决
前言 普元EOS的开发包中,提供了maven,因为EOS项目的某些依赖只能从普元官方仓库获取,因此,编译EOS项目必须使用EOS提供的maven。 maven拉取依赖失败 某些版本的EOS提供的maven在编译EOS项目的时候会出现拉取失败的现象。 [FATA…...
Pycharm + Pyside6
1. 使用 Qt designer 创建 UI 文件 2. 使用 UIC 工具生成 ui_.py 文件 3. 自定义类导入ui.py 文件的窗口类 4.自定义窗口继承UI窗体类 5. self.setupUi(self) from PySide6.QtWidgets import QApplication, QWidget, QComboBox, QVBoxLayout from ui_test import Ui_Formc…...
强化学习之价值迭代算法动态规划求解悬崖漫步环境(CliffWalking)最优策略及最优状态价值函数
class CliffWalkingEnv:def __init__(self,ncol12,nrow4):self.ncolncol#定义网格世界的列self.nrownrow#定义网格世界的行self.Pself.createP()#转移矩阵P[state][action][(p,next_state,reward,done)]包含下一个状态和奖励def createP(self):P[[[]for i in range(4)]for j in…...
javascript deriveKey和deriveBits()由主密钥派生出新的密钥进行加密
deriveKey 方法的完整示例,演示如何使用 HMAC 作为密钥派生函数(KDF)来从一个给定的秘密(如密码)派生出一个新的 AES 加密密钥。 //创建一个函数来生成随机盐function getRandomSalt(length){let arraynew Uint8Array…...
基于微信小程序的自习室选座系统/基于Java的自习室选座系统/自习室管理系统的设计与实现
获取源码联系方式请查看文章结尾🍅 摘要 自习室选座是学校针对用户必不可少的一个部分。在学校的整个过程中,学生担负着最重要的角色。为满足如今日益复杂的管理需求,各类微信小程序自习室选座也在不断改进。本课题所设计的小程序自习室选座系…...
echarts所遇到的问题,个人记录
TreeMap 矩形树图,label设置富文本之后,无法垂直居中 font-size 支持rem,其余不支持 font-size 支持 rem,但是其余的属性如height,width等不支持 echarts-for-react 绑定事件,会覆盖实例上绑定的 当给cha…...
Skyeye云智能制造企业版源代码全部开放
智能制造一体化管理系统 [SpringBoot2 - 快速开发平台],适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…...
Springboot 整合Elasticsearch
1 java操作ES方式 1.1 操作ES 9300端口(TCP) 但开发中不在9300进行操作 ES集群节点通信使用的也是9300端口如果通过9300操作ES,需要与ES建立长连接 可通过引入spring-data-elasticsearch:transport-api.jar不在9300操作原因:1.springboot版本不同&…...
WeNet环境配置与aishell模型训练
WeNet环境配置与aishell模型训练 1环境配置 踩坑记录: 系统使用win11,我根据wenet官方文档,使用conda虚拟环境安装了cuda12.1,安装wenet依赖库,其中deepspeed报错,根据报错信息查询github,发现…...
【C++的剃刀】我不允许你还不会AVL树
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 Hello,这里是kiki,今天继续更新C部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要…...
React搭建Vite项目及各种项目配置
1. 创建Vite项目 在操作系统的命令终端,输入以下命令: yarn create vite 输入完成以后输入项目名称、选择开发框架,选择开发语言,如下图所示,即可完成项目创建。 注意事项: 1. Node版本必须符合要求&…...
Linux Vim教程:多文件编辑与窗口管理
目录 1. 多文件编辑基础 1.1 缓冲区管理 1.2 标签页管理 1.3 分屏管理 2. 多文件编辑的高级技巧 2.1 同时编辑多个文件 2.2 使用会话 2.3 使用寄存器 3. 窗口管理的实用技巧 3.1 窗口调整 3.2 窗口排列 3.3 快速切换 4. 使用插件增强多文件编辑与窗口管理 4.1 NE…...
C语言进阶 11.结构体
C语言进阶 11.结构体 文章目录 C语言进阶 11.结构体11.1. 枚举11.2. 结构类型11.3. 结构与函数11.4. 结构中的结构11.5. 类型定义11.6. 联合11.7. PAT11-0. 平面向量加法(10)11-1. 通讯录的录入与显示(10) 11.1. 枚举 常量符号化: 用符号而不是具体的数字表示程序中的数字 cons…...
Vue--解决error:0308010C:digital envelope routines::unsupported
原文网址:Vue--解决error:0308010C:digital envelope routines::unsupported_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决node.js在运行Vue项目时的报错:error:0308010C:digital envelope routines::unsupported。 问题描述 使用node.js运行Vu…...
基于Go + gin+gorm+ rag+千问大模型 + pgvector 构建市场监管智能问答智能体
基于Go 千问大模型 pgvector构建市场监管智能问答智能体 一、项目背景 随着"放管服"改革的深入推进,市场监管领域政策法规不断更新,企业和公众对政策咨询的需求日益增长。传统的政策咨询模式存在响应慢、效率低、准确性差等问题,…...
掌握小程序逆向工具:wxapkg解析与代码还原全流程指南
掌握小程序逆向工具:wxapkg解析与代码还原全流程指南 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 当你需要逆向分析小程序包时,是否遇到过这些痛点?wxapkg文件无法直接查看内容、…...
安路PH1A180 FPGA实战:用米联客FDMA IP搞定DDR视频缓存,附源码调试心得
安路PH1A180 FPGA实战:FDMA IP与DDR视频缓存深度优化指南 在视频处理系统中,FPGADDR架构已成为实时高清视频流处理的标准方案。安路PH1A180凭借其高性能特性,配合米联客FDMA IP核,能够构建稳定高效的视频缓存系统。但在实际工程落…...
从Word2Vec到BERT:前馈网络在NLP词嵌入进化史中扮演了什么角色?
从Word2Vec到BERT:前馈网络如何重塑NLP词嵌入的技术基因 在自然语言处理(NLP)的发展历程中,词嵌入技术的进化犹如一场静默的革命。当我们回溯这段历史时会发现,前馈神经网络(Feedforward Neural Network&am…...
PCtoLCD2002字模提取软件:从基础配置到高效应用
1. PCtoLCD2002基础功能解析 第一次接触PCtoLCD2002时,我被它简洁的界面和强大的功能所吸引。这款软件虽然体积小巧,但在嵌入式开发领域却是不可或缺的利器。它主要解决了一个核心问题:如何将我们熟悉的文字和图形,转换成单片机能…...
Python内存修复不靠猜:用objgraph+gc.get_referrers+自定义Allocator实现可视化追踪(工业级方案)
第一章:Python内存修复不靠猜:用objgraphgc.get_referrers自定义Allocator实现可视化追踪(工业级方案)Python内存泄漏常表现为对象持续增长却无法被回收,传统日志与print调试效率低下。本章提供一套可落地的工业级诊断…...
AnimateDiff部署指南:SD1.5+Motion Adapter显存优化版保姆级教程
AnimateDiff部署指南:SD1.5Motion Adapter显存优化版保姆级教程 1. 项目简介 想用几句话就让AI帮你生成一段流畅的视频吗?AnimateDiff就是这样一个神奇的工具。与那些需要你先提供一张图片才能生成视频的模型不同,AnimateDiff可以直接根据你…...
Cesium.js实战:用自定义Shader给无人机轨迹加上酷炫流动尾线(附完整代码)
Cesium.js实战:用自定义Shader给无人机轨迹加上酷炫流动尾线(附完整代码) 在三维地理信息可视化领域,动态轨迹的表现力直接影响数据传达效率。想象一下,当无人机飞越城市上空时,一条普通的静态线条很难直观…...
Video2X:让你的老旧视频焕发新生的AI魔法工具
Video2X:让你的老旧视频焕发新生的AI魔法工具 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video…...
AI专著生成速达秘籍:高性价比工具剖析,助力快速创作
创新是学术专著所需的核心元素,也是写作的一道高门槛。一部合格的学术专著,不能仅仅是对已有研究成果的机械拼凑,而应当展示贯穿全书的独特见解、理论模型或研究方法。在浩如烟海的学术文献中,识别尚未探索的研究空白并不是一件容…...
