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

MySQL有哪些日志?

MySQL主要有三种日志:undo log、redo log、binlog。前两种是InnoDB特有的,binlog是MySQL的Server层中的。

Buffer Pool

buffer pool是MySQL的缓冲池,里面存储了数据页、索引页、undo页等(与数据库不一致的即为脏页)。对数据库做的操作都会先在buffer pool中执行,后配合redo log持久化到磁盘。

undo log

事务回滚

undo log是回滚日志,用于保证事务原子性。在事务执行过程中会记录undo log日志(这里是先记录在buffer pool的undo页中,生成undo log,需要记录对应的redo log),若事务需要回滚,则根据undo log执行与原来相反的操作。

MVCC

我们知道数据库中的一条记录中包含了两个隐藏列:trx_id(事务ID)和roll_pointer(版本指针),undo log记录中也是如此,通过版本指针把记录的旧值连成链表(数据页中的数据就是最新版本),通过版本指针查找记录的旧版本,使用trx_id和Read View判断事务可见性。Read View是什么?

Read View : 快照,在可重复读级别下,每一个事务开始都会生成一个Read View,保证查看的数据一致。
重要字段:

  1. creator_trx_id:创建这个快照的事务ID
  2. m_ids:存储的是当前时刻活跃的事务ID(活跃事务指的是已已启动但未提交的事务)
  3. min_trx_id:活跃事务ID中的最小值
  4. max_trx_id:下一个事务分配的trx_id

如何判断事务可见性?

通过比较记录中的trx_id:

  • trx_id < min_trx_id:代表修改记录的事务早就提交,可见
  • trx_id >= max_trx_id:代表修改记录的事务在当前时刻还没启动,不可见
  • 分两种情况:
    • trx_idm_ids中:事务未提交,不可见
    • trx_id不在m_ids中:事务已提交,不可见

通过比较trx_id来控制并发事务,这就是MVCC(多版本并发控制)。

redo log

redo log是重做日志,使得MySQL具有crash-safe(崩溃恢复)能力,保证了事务的持久性
首先,redo log是一个循环文件组,写入为循环写。通过以下两个参数设置文件数量和文件大小:

innodb_log_files_in_group
innodb_log_file_size

事务执行时的操作会被写入redo log buffer中,记录的字段主要有:操作类型、修改的数据页号、修改数据的页内偏移量、修改的字段值。
write pos指向当前记录的位置,checkpoint指向当前要擦除的位置。
在这里插入图片描述

当write pos追上checkpoint时,说明redo log文件满了,这时不能再进行新的更新操作了,更新操作的SQL将被堵塞。此时会停下来把buffer pool中的脏页刷盘,让checkpoint后推,才可以进行操作。

刷盘
  1. 写入方式:redo log文件是顺序写(性能好),而数据页是随机写。
  2. 刷盘时机:
    1. 数据库正常关闭
    2. InnoDB会有一个后台线程每隔一秒将redo log buffer持久化到磁盘
    3. 事务提交时(控制参数:innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit参数

  • 参数为0:留在redo log buffer中,不刷新到磁盘(可能会丢失上1秒的所有数据)。
  • 参数为1:直接刷新到磁盘(fsync)。
  • 参数为2:写入redo log文件(操作系统中的Page Cache)(操作系统不挂就不会丢失)。

参数0和2是通过上文说到的后台线程来刷盘的。

  • 0:redo log buffer (write) -> Page Cache (fsync) -> 磁盘
  • 2:Page Cache (fsync) -> 磁盘

binlog

binlog是归档日志。主要用于数据备份、主从复制。

与redo log的区别
  1. 适用范围不同:开篇就说了,redo log是InnoDB存储引擎特有的,binlog是都能使用的
  2. 日志格式:binlog有三种格式:ROW、STATEMENT(默认)、MIXED。
    1. STATEMENT记录操作的SQL(相当于记录了逻辑操作,所以针对这种格式binlog可以被称为逻辑日志),主从复制中根据SQL语句重现,但是当记录的SQL中使用了动态函数(uuid, now...),这样就会导致主从数据不一致。
    2. ROW记录行数据被修改成什么样了(这时就不能称为是逻辑日志了),产生记录多,导致binlog文件过大。
    3. MIXED:根据情况自动选择日志格式(STATEMENT, ROW)
    4. redo log物理日志,记录的是在某个数据页做了什么修改。比如对 XXX 表空间中的 XXX数据页 ZZZ 偏移量的地方做了 AAA 修改。
  3. 写入方式不同:binlog是追加写,写满一个文件就创建一个新文件接着写。
  4. 用途不同。
主从复制
  1. 主库写入binlog,提交事务,更新数据。
  2. 从库会创建一个专门的 I/O 线程连接主库的log dump线程,来接收主库的binlog日志,然后再把binlog信息写入一个relay log(中继日志),返回给主库“复制成功”的响应。
  3. 从库会创建一个用于回放binlog的线程,去读relay log,然后回放binlog更新存储引擎中的数据,最终实现主从的数据一致性。
什么时候刷盘

首先要知道的是一个事务的binlog不能被拆开(因为要保证原子性)。
在事务执行过程中,会先把binlog存储到binlog cache,binlog cache(通过binlog_cache_size控制单个线程中binlog cache的大小),满了需要暂存到磁盘。
事务提交时,会把binlog cache的日志writePage Cache(binglog文件) ,并清空binlog cache。通过sync_binlog参数控制fsync到磁盘的时机。
sync_binlog参数:

  • 0:不会fsync,后续由操作系统决定何时存储到磁盘
  • 1:立刻fsync
  • N:等存储了 N 个事务的binlog再调用fsync
两阶段提交

目的:防止在提交事务时, redo log和binlog有一个写入失败( 数据库宕机等原因 ),导致主从数据不一致。

主要方式就是先写redo log,后写binlog

阶段1:准备阶段(Prepare):写入redo log,将事务状态设为prepare

阶段2:提交阶段(Commit):写入binlog并持久化到磁盘,成功后,将redo log状态改为 commit

造成问题:

  1. 磁盘 I/O 次数多:一次事务提交至少需要两次刷盘
  2. 锁竞争激烈:为了保证多事务不发生顺序上的混乱

MySQL使用组提交的方式进行了优化,但是我在这里就不多说了。

相关文章:

MySQL有哪些日志?

MySQL主要有三种日志&#xff1a;undo log、redo log、binlog。前两种是InnoDB特有的&#xff0c;binlog是MySQL的Server层中的。 Buffer Pool buffer pool是MySQL的缓冲池&#xff0c;里面存储了数据页、索引页、undo页等&#xff08;与数据库不一致的即为脏页&#xff09;。…...

Axios:现代JavaScript HTTP客户端

在当今的Web开发中&#xff0c;与后端服务进行数据交换是必不可少的。Axios是一个基于Promise的HTTP客户端&#xff0c;用于浏览器和node.js&#xff0c;它提供了一个简单的API来执行HTTP请求。本文将介绍Axios的基本概念、优势、安装方法、基本用法以及如何使用Axios下载文件。…...

python学opencv|读取视频(一)灰度视频制作和保存

【1】引言 上一次课学习了用opencv读取图像&#xff0c;掌握了三个函数&#xff1a;cv.imread()、cv.imshow()、cv.imwrite() 相关链接如下&#xff1a; python学opencv|读取图像-CSDN博客 这次课我们继续&#xff0c;来学习用opencv读取视频。 【2】学习资源 首先是官网…...

【Rust WebAssembly 入门实操遇到的问题】

Rust WebAssembly 入门实操遇到的问题 什么是WebAssembly跟着教程走wasm-pack build error总结 什么是WebAssembly WebAssembly&#xff08;简称Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令 格式。Wasm 被设计为编程语言的可移植编译目标&#xff0c;支持在 Web 上部…...

掌握CMake中的变量:设置、使用及实际应用示例详解

掌握CMake中的变量&#xff1a;设置、使用及实际应用示例详解 在CMake中&#xff0c;变量的设置和使用是管理构建配置的核心部分&#xff0c;它使得项目配置更加灵活和动态。变量在CMake中用于保存各种数据&#xff0c;如路径、选项值或文件列表&#xff0c;可以在整个CMake配…...

React基础知识三 router路由全指南

现在最新版本是Router6和Router5有比较大的变化&#xff0c;Router5和Router4变化不大&#xff0c;本文以Router6的写法为主&#xff0c;也会对比和Router5的不同。比较全面。 安装路由 npm i react-router-dom基本使用 有两种Router&#xff0c;BrowserRouter和HashRouter&…...

[VUE]框架网页开发02-如何打包Vue.js框架网页并在服务器中通过Tomcat启动

在现代Web开发中&#xff0c;Vue.js已经成为前端开发的热门选择之一。然而&#xff0c;将Vue.js项目打包并部署到生产环境可能会让一些开发者感到困惑。本文将详细介绍如何将Vue.js项目打包&#xff0c;并通过Tomcat服务器启动运行。 1. 准备工作 确保你的项目能够正常运行,项…...

k8s Quality of Service

文章目录 QoS 分类规则QoS 类别影响创建 QoS 分类的案例1. Guaranteed QoS 示例示例 YAML 文件&#xff1a; 2. Burstable QoS 示例示例 YAML 文件&#xff1a; 3. BestEffort QoS 示例示例 YAML 文件&#xff1a; 4. 混合 QoS 示例&#xff08;多个容器&#xff09;示例 YAML …...

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09; 目录 顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…...

什么语言适合做 Serverless 开发?

随着云计算的普及&#xff0c;**无服务器架构&#xff08;Serverless Architecture&#xff09;**成为一种流行的开发模式&#xff0c;它使得开发者无需管理服务器基础设施&#xff0c;专注于编写应用逻辑。无服务器架构通常按需提供计算资源&#xff0c;能够灵活地扩展&#x…...

使用OpenCV和卡尔曼滤波器进行实时活体检测

引言 在现代计算机视觉应用中&#xff0c;实时检测和跟踪物体是一项重要的任务。本文将详细介绍如何使用OpenCV库和卡尔曼滤波器来实现一个实时的活体检测系统。该系统能够通过摄像头捕捉视频流&#xff0c;并使用YOLOv3模型来检测目标对象&#xff08;例如人&#xff09;&…...

【25春招前端八股文】——JS数据类型检测方式

检测数据类型 # typeof 总结&#xff1a;数组、对象、null都会被判断为object&#xff0c;其他判断都正确的类型。 可以检测基本数据类型null会检测为Object&#xff0c;因为null也是一个空的引用对象复杂数据类型只能检测function和Object 情况说明&#xff1a; 数组&#x…...

Kafka的学习路径规划

目录标题 1. 记&#xff08;记忆力&#xff09;Kafka核心概念Kafka关键配置 2. 懂&#xff08;理解力&#xff09;Kafka工作原理Kafka核心功能Kafka架构设计 3. 网&#xff08;知识网络&#xff09;技术栈整合用例和场景 4. 拓&#xff08;全面拓展&#xff09;学习材料多样化内…...

linux模拟试题

Linux 基础阶段考试笔试模拟试卷 审核人:王旺旺 一.填空题(每题 1 分,共 30 分) 1.验证 httpd 服务是否启动的命令是_______ 答:systemctl status httpd 或 netstat -anptl 或 ss -anpt 2.将目录 xxhf 下所有文件的所属组改为 user1 的命令是_______ 答:chown -R ,user1 …...

Qt-界面优化QSS

QSS介绍 先说下CSS&#xff1a; 在⽹⻚前端开发领域中, CSS 是⼀个⾄关重要的部分. 描述了⼀个⽹⻚的 "样式". 从⽽起到对⽹⻚美化的作⽤。 Qt 仿照 CSS 的模式, 引⼊了 QSS, 来对 Qt 中的控件做出样式上的设定 。 CSS的功能很强大&#xff0c;QSS要逊色一些&#…...

QT实战-qt各种菜单样式实现

本文主要介绍了qt普通菜单样式、带选中样式、带子菜单样式、超过一屏幕菜单样式、自定义带有滚动条的菜单样式&#xff0c; 先上图如下&#xff1a; 1.普通菜单样式 代码&#xff1a; m_pmenu new QMenu(this);m_pmenu->setObjectName("quoteListMenu"); qss文…...

深度学习基础03_BP算法(下)过拟合和欠拟合

目录 一、BP算法(下) 0、反向传播代码回顾 写法一&#xff1a; 写法二(更常用)&#xff1a; 1、BP中的梯度下降 1.数学描述 2.传统下降方式 3.优化梯度下降方式 指数加权平均 Momentum AdaGrad RMSProp Adam(常用) 总结 二、过拟合和欠拟合 1、概念 1.过拟合 …...

web vue 滑动选择 n宫格选中 九宫格选中

页面动态布局经常性要交给客户来操作&#xff0c;他们按时他们的习惯在同一个屏幕内显示若干个子视图&#xff0c;尤其是在医学影像领域对于影像的同屏显示目视对比显的更为重要。 来看看如下的用户体验&#xff1a; 设计为最多支持5行6列页面展示后&#xff0c;右侧的布局则动…...

Spring Boot整合EasyExcel

Spring Boot整合EasyExcel主要涉及到以下几个步骤&#xff1a; 1.添加EasyExcel依赖到Spring Boot项目的pom.xml文件中。 2.创建数据模型类&#xff0c;用于映射Excel文件中的数据。 3.编写读取和写入Excel的服务。 以下是一个简单的例子&#xff1a; 1.添加EasyExcel依赖 …...

微软表示不会使用你的 Word、Excel 数据进行 AI 训练

​微软否认使用 Microsoft 365 应用程序&#xff08;包括 Word、Excel 和 PowerPoint&#xff09;收集数据来训练公司人工智能 (AI) 模型的说法。 此前&#xff0c;Tumblr 的一篇博文声称&#xff0c;雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据&#xff0c;用…...

SEO网络推广费用高吗_需要多少年才能收回成本

SEO网络推广费用高吗?需要多少年才能收回成本 在当今数字化经济时代&#xff0c;SEO网络推广已经成为企业提升在线可见度和吸引客户的关键手段。不少企业在决定投资SEO推广时&#xff0c;常常会对“SEO网络推广费用高吗&#xff1f;需要多少年才能收回成本”这一问题感到困惑…...

OpenClaw模型微调:gemma-3-12b-it针对自动化任务的专项优化

OpenClaw模型微调&#xff1a;gemma-3-12b-it针对自动化任务的专项优化 1. 为什么需要专项优化&#xff1f; 当我第一次将OpenClaw接入gemma-3-12b-it模型时&#xff0c;发现了一个有趣的现象&#xff1a;这个号称"指令优化"的模型在处理简单问答时表现优异&#x…...

从Logistic曲线到疫情预测:用Python和SciPy复现SI传染病模型(附代码)

从Logistic曲线到疫情预测&#xff1a;用Python和SciPy复现SI传染病模型&#xff08;附代码&#xff09; 最近在整理疫情数据时&#xff0c;我发现一个有趣的现象&#xff1a;很多地区的感染人数增长曲线都呈现出典型的S型特征。这让我想起了经典的SI传染病模型&#xff0c;它用…...

深度解析:Agent 如何处理“开放性目标”与“约束性规则”的冲突?

深度解析&#xff1a;Agent 如何处理“开放性目标”与“约束性规则”的冲突&#xff1f; 1. 引言 (Introduction) 1.1 核心概念锚定与常见误解破冰 在正式展开冲突处理的技术细节之前&#xff0c;我们必须先锚定文章涉及的三个最核心、最容易被模糊定义/误解的AI Agent领域概念…...

计算机毕业设计:Python地铁多维度运营分析与数据管理系统 Django框架 数据分析 可视化 大数据 机器学习 深度学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

olonCode v0.0.20 发布 - 编程智能体(新增子代理和浏览器能力)

关于 SolonCode&#xff08;编程智能体&#xff09;SolonCode 是由杭州无耳科技有限公司&#xff0c;基于 Java 8 Solon AI 开发的 “Claude Code” 国产开源实现版本。它不仅是一个 AI 终端智能助手&#xff08;帮你查资料、写报告、发邮件&#xff0c;生成图片、视频&#x…...

orientation误差表示

目录1 Orientation误差&#xff08;最常见方法&#xff09;误差旋转Python实现2 Orientation RMSE3 位置 姿态一起计算&#xff08;SE(3)&#xff09;4 Python实现&#xff08;SE3误差&#xff09;5 机器人领域常见指标6 实践建议&#xff08;很重要&#xff09;总结orientati…...

保姆级教程:用ms-swift微调Qwen3-Embedding-0.6B,搞定文本相似度任务

从零构建文本语义搜索系统&#xff1a;基于Qwen3-Embedding的实战指南 当我们需要在海量文本中快速找到相关内容时&#xff0c;传统的关键词匹配已经力不从心。想象一下电商平台的智能推荐、客服系统的FAQ自动匹配&#xff0c;或是法律文档的相似案例检索——这些场景都需要理解…...

如何用OpCore-Simplify在30分钟内完成黑苹果配置:自动化OpenCore EFI工具终极指南

如何用OpCore-Simplify在30分钟内完成黑苹果配置&#xff1a;自动化OpenCore EFI工具终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复…...

t3mujinpack胶片模拟技术解析:基于Hald CLUT算法的开源胶片仿真实现

t3mujinpack胶片模拟技术解析&#xff1a;基于Hald CLUT算法的开源胶片仿真实现 【免费下载链接】t3mujinpack Collection of film emulation presets for open-source RAW developer software Darktable. 项目地址: https://gitcode.com/gh_mirrors/t3/t3mujinpack t3m…...