MySQL的组成与三种log

news2024/11/19 23:17:55

MySQL由几块组成

  1. 连接器
  2. 分析器
  3. 优化器
  4. 执行器

在这里插入图片描述

MySQL的三大log

blog

作用:

用于主从同步与数据恢复

记录内容:

已经完成的 DML(数据操作语句),主要是用于数据备份

redolog<重试日志>

作用:
  1. 崩溃恢复,用于事务的持久化,确保数据一致性
  2. 减少写磁盘IO慢的问题
记录内容:

记录数据页的物理变化(可以理解为记录的是DML造成的数据diff)

工作机制

在这里插入图片描述

MySQL写操作同步写的是缓存区与redolog,异步写的磁盘

思考:写redolog也是磁盘操作为啥比直接写数据快?
redolog是连续内存,顺序写入,不需要IO寻址,所以更快

工作机制

  1. 写入顺序:redolog 是顺序写入的,这是非常高效的。
  2. 两段式提交:在事务提交时,MySQL 首先将修改记录到 redolog,然后再修改数据页。这样,在系统崩溃时,系统可以通过 redolog 恢复事务的修改。
  3. 双写缓冲:为了防止单点故障导致的数据丢失,InnoDB 使用双写缓冲机制将数据同时写入 redolog 和缓冲池。

undolog

作用:
  1. 事务的回滚
  2. 多版本控制<MVCC由undolog实现>
记录内容:

旧值,用于事务的回滚

MVCC

多版本并发控制
可以看下面这个文章:
MVCC详解

MVCC与undolog如何实现版本链

mysql列中会存有俩隐藏字段:

  • trx_id: 最近操作的事务id(自增)<事务可能未提交>
  • roll_pointer: 最新undolog日志
    在这里插入图片描述
    单条数据的undolog内容:(链表结构)
  • data:mysql数据快照
  • roll_pointer:这条数据上个的undolog地址

insert 语句产生的undolog roll_pointer内容为空,因为他没有上个版本

在这里插入图片描述
所以可以通过mysql数据+undolog 找到数据的历史版本

MVCC如何解决幻读问题

参考资料

简单概括如下:
开启事务的时候会产生一个视图,存本次事务id,所有活跃的事务id等
数据的事务id<最小的活跃事务id 证明已提交,可读
数据的事务id>本次事务id 证明未提交,不可读
数据的事务id属于活跃的事务id 证明当时未提交,不可读

这样就通过比较事务id的方式解决幻读了

MVCC如何实现读已提交与可重复读

读已提交实现原理
  1. 一致性读:

    • 每次 SELECT 查询都会获取最新提交的快照。
    • 事务读取时,会忽略未提交的事务所做的修改,读取其他事务已提交的最新版本。
      事务ID比较:
  2. 读取时,检查数据行的创建版本号和删除版本号。

    • 只读取创建版本号小于等于当前事务ID的数据,并且删除版本号大于当前事务ID的数据或删除版本号为空的数据。
可重复读实现原理

固定的快照视图
事务开始时,获取一个一致性快照,整个事务期间读取的数据视图保持不变

  1. 一致性读:
  • 事务开始时,获取一个一致性快照
  • 在事务期间,所有 SELECT 查询基于该一致性快照。
  1. 事务ID比较:

    • 读取时,检查数据行的创建版本号和删除版本号。
    • 只读取创建版本号小于等于当前事务开始时的快照数据,并且删除版本号大于当前事务开始时的快照数据或删除版本号为空的数据。

区别:

  1. 可重复读在事务开始时,会生成一个一致性快照存当时活跃的事务id
  2. 读已提交比较的是数据上的事务id,可重复读比较多是快照数据上的事务id

扩展

interpolateparams 参数做了什么

https://wklken.me/posts/2021/01/22/golang-sql-driver-interpolateparams.html
interpolateparams=false
prepared -> execute -> close
好处:

  1. 避免通过引号组装拼接sql语句。避免sql注入带来的安全风险
  2. 可以多次执行的sql语句

interpolateparams=true

execute -> close

  1. 减少了prepared网络请求
  2. 会防止SQL注入, 在驱动中通过转义特殊字符实现的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux安装Nacos教程【带图文命令巨详细】

巨详细Linux安装Nacos教程 1、检查是否有残留nacos版本2、上传安装包至服务器2.1安装包获取2.2创建相关目录 3、安装Nacos4、配置Nacos4.1修改数据源4.2新建nacos数据库4.3启动nacos4.4把nacos进程交给systemctl管理4.5设置nacos开机自启动 1、检查是否有残留nacos版本 rpm -q…

随便用css换个渐变的太阳

来源于GPT4o&#xff1a;代码来源 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>渐变色上半圆…

此表单不安全,因此系统已关闭自动填充功能

问题截图&#xff1a; 截图就不放了&#xff0c;公司的系统不方便&#xff0c;就是form表单会有个提示“此表单不安全&#xff0c;因此系统已关闭自动填充功能” 解决思路&#xff1a; 1、问题原因 使用https访问&#xff0c;但表单提交地址是http的 2、查看表单配置 表单…

具有 MOSFET 的电压到电流 (V-I) 转换器电路

设计说明 该单电源、低侧、V-I 转换器向可以连接到比运算放大器电源电压更高的电压的负载提供经过良好调节的电流。该 电路接受介于 0V 和 2V 之间的输入电压&#xff0c;将其转换为介于 0mA 和 100mA 之间的电流。通过将低侧电流检测电 阻 R3 上的压降反馈到运算放大器的反相…

C语言详解(动态内存管理)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

《广告数据定量分析》读书笔记之统计原理2

3.相关分析&#xff1a;描述的是两个数值变量间关系的强度。&#xff08;两个数值型变量之间的关系&#xff09; &#xff08;1&#xff09;图表表示&#xff1a;散点图 &#xff08;2&#xff09;衡量关系强度指标&#xff1a;相关系数r。 &#xff08;r的取值为-1到 1&…

图的创建和BFS,DFS遍历

图的创建 图是一种用于表示对象及其关系的抽象数据结构&#xff0c;由节点&#xff08;也称为顶点&#xff09;和连接节点的边组成。图可以分为有向图&#xff08;Directed Graph&#xff09;和无向图&#xff08;Undirected Graph&#xff09;&#xff0c;以及加权图&…

Chrome 源码阅读:跟踪一个鼠标事件的流程

我们通过在关键节点打断点的方式&#xff0c;去分析一个鼠标事件的流程。 我们知道chromium是多进程模型&#xff0c;那么&#xff0c;我们可以推测&#xff1a;一个鼠标消息先从主进程产生&#xff0c;再通过跨进程通信发送给渲染进程&#xff0c;渲染进程再发送给WebFrame&a…

elementUI - 折叠以及多选的组件

//子组件 <template><!-- 左侧第二个 --><div class"left-second-more"><div class"layer-list-wrapper1"><el-collapse v-model"activeNames" change"handleChange"><el-collapse-item v-for"…

企业必备技能-打造全屏轮播图的终极指南

标题&#xff1a;“视觉盛宴&#xff1a;打造全屏轮播图的终极指南” 引言 在网页设计中&#xff0c;轮播图是一种常见的视觉元素&#xff0c;它能够吸引访客的注意力并展示重要内容。本文档将指导你如何使用HTML和CSS快速创建一个全屏轮播图&#xff0c;使您的网站更加生动和…

react-学习基础偏

1.新建文件夹 2.vscode引入这个文件夹 3.打开vscode终端 执行命令 npx create-react-app react-basic 创建基本项目&#xff08;react-basic项目文件夹名&#xff09; 4.进入到这个文件夹 可用的一些命令 这就算启动成功 5. 这是项目的核心包 渲染流程

免费实现网站HTTPS访问

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种基于SSL协议的HTTP安全协议&#xff0c;旨在为客户端&#xff08;浏览器&#xff09;与服务器之间的通信提供加密通道&#xff0c;确保数据在传输过程中的保密性、完整性和身份验证。与传统的HTTP相比&a…

​​​​​​ 基于Nmap的异步无状态端口扫描技术

​​​​​​ 基于Nmap的异步无状态端口扫描技术 传统的端口扫描&#xff0c;主要是依靠TCP三次握手去连接&#xff0c;而建立连接的各个过程都存在连接状态&#xff0c;这些状态由操作系统在底层实现存储&#xff0c;可利用这些状态对应用层的数据进行处理。但是&#xff0c;…

2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展

文章目录 1 Handles 类1.1 Scene 响应函数1.2 自定义窗口中监听 Scene1.3 Handles 常用 API2.2.1 颜色控制2.2.2 文本2.2.3 线段2.2.4 虚线2.2.5 圆弧2.2.6 圆2.2.7 立方体2.2.8 几何体2.2.9 移动、旋转、缩放2.2.10 自由移动 / 旋转 2 Scene 窗口中显示 GUI3 HandleUtility4 G…

AI产品经理岗位需求量大吗?好找工作吗?

前言 在当今这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已不再仅仅是一个遥远的概念&#xff0c;而是深深嵌入到我们生活的方方面面&#xff0c;从日常的语音助手到复杂的自动驾驶系统&#xff0c;AI的触角无处不在。随着AI技术的广泛应用和持续进…

react native中内容占位效果

react native中内容占位效果 效果实例图实例代码skeleton.jsx 效果实例图 实例代码skeleton.jsx import React, { useEffect, useRef } from "react"; import { Animated, StyleSheet, View } from "react-native"; import { pxToPd } from "../../.…

“开源与闭源:AI大模型发展的未来之路“

文章目录 每日一句正能量前言数据隐私开源大模型与数据隐私闭源大模型与数据隐私数据隐私保护的共同考虑结论 商业应用开源大模型的商业应用优势&#xff1a;开源大模型的商业应用劣势&#xff1a;闭源大模型的商业应用优势&#xff1a;闭源大模型的商业应用劣势&#xff1a;商…

vue3+ts 拖拽容器边缘,改变容器宽度和高度

例如&#xff1a;我们的代码编辑器 终端与代码区&#xff0c;可以纵向拖拽&#xff0c;改变两个容器高度 目录与代码区可以横向拖拽&#xff0c;改变两个容器宽度 本文使用vue3tstailwindcss&#xff0c;把横向纵向整合在一起写了&#xff0c;也可以分开使用 utils目录下新建…

【AIoT-Robot】3d hand pose

手语是聋哑人士的主要沟通工具,它是利用手部和身体的动作来传达意义。虽然手语帮助它的使用者之间互相沟通,但聋哑人士与一般人的沟通却十分困难,这个沟通障碍是源于大部分人不懂得手语。 1. 手势&&手语 手势:手的姿势 ,通常称作手势。它指的是人在运用手臂时,所…