MySQL的组成与三种log

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注入, 在驱动中通过转义特殊字符实现的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux - 高级IO

目录 理解五种IO模型非阻塞IO的设置多路转接之select 实现一个简易的select服务器select服务器的优缺点 多路转接之poll 实现一个简易的poll服务器poll服务器的优缺点 多路转接之epoll epoll原理epoll的优势用epoll实现一个简易的echo服务器 epoll的LT和ET工作模式 什么是LT和…

【mysql】数据报错: incorrect datetime value ‘0000-00-00 00:00:00‘ for column

一、问题原因 时间字段在导入值0000-00-00 00:00:00或者添加 NOT NULL的时间字段时&#xff0c;会往mysql添加0值&#xff0c;此时可能出现此报错。 这是因为当前的MySQL不支持datetime为0&#xff0c;在MySQL5.7版本以上&#xff0c;默认设置sql_mode模式包含NO_ZERO_DATE, N…

实验名称:组合数据类型

大家好&#xff01;欢迎收听你的月亮我的心&#xff01;我是肖老师&#xff01;好久不见&#xff01; 目录 一、实验目的&#xff1a; 二、实验环境&#xff1a; 三、实验步骤&#xff1a; 四、实验结果&#xff1a; 1.已知列表li_one[1,2,1,2,3,5,4,3,5,7,4,7,8],删除列…

解决使用Python检查本地网络中运行的Web服务器的问题

如果我们要检查本地网络中运行的 Web 服务器&#xff0c;可以使用 Python 的 socket 模块来进行网络连接测试。以下是一个简单的示例代码&#xff0c;演示如何检查本地网络中运行的 Web 服务器&#xff1a; 1、问题背景 在学习如何使用 Python 时&#xff0c;一位用户希望编写…

C#的web项目ASP.NET

添加实体类和控制器类 using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace WebApplication1.Models {public class Company{public string companyCode { get; set; }public string companyName { get; set; }public string com…

开始报名!龙蜥社区系统安全 Meetup 硬核议程发布

在数字化时代&#xff0c;随着云计算、大数据和人工智能等技术的广泛应用&#xff0c;操作系统扮演着关键的角色&#xff0c;成为支撑关键业务和数据的核心基础设施。在这一背景下&#xff0c;操作系统的安全性显得尤为重要&#xff0c;它直接影响着信息系统的稳定运行和持续发…

RocketMQ---Day1

RocketMQ---Day1 1.认识MQ 火车案例&#xff1a; 人就相当于消息 进站口将消息分发给不同的候车厅&#xff08;主题&#xff09; 火车将不同候车厅的人拉走&#xff08;消费不同主题里面的数据&#xff09; MQ是一种消息中间件。 2.微服务的远程调用 1.同步调用 RPC&am…

(Arkts界面示例)ets pages Demo

Index.ets 文件 import router from ohos.routerEntry//表示该自定义组件为入口组件 Component //表示自定义组件 struct Index {//表示组件中的状态变量&#xff0c;状态变量变化会触发UI刷新State changeValue: string State submitValue: string controller: SearchContr…

04.docker的主要组成部分

docker体验 docker是传统的CS架构分为docker client和docker server,跟mysql一样 查看版本命令&#xff1a;docker version 查看docker下载的是社区版,ce代表社区 rpm -qa |grep docker 查看docker系统命令 docker system docker info&#xff08;如果要做监控&#xff…

机器视觉开启航空安全新篇章:飞机复合材料检测研究进展,军工材料、智能装备和通信技术全产业链博览会

"精准把控行业标准&#xff1a;机器视觉在飞机垂尾复合材料检测中的应用" 随着航空航天技术的快速发展&#xff0c;飞机制造的质量控制要求越来越高&#xff0c;尤其是对于关键部件如垂尾复合材料零件的缺陷检测。基于机器视觉的检测技术因其非接触、高效率和高精度…

使用 Django Channels 构建实时聊天应用(包含用户认证和消息持久化)

文章目录 准备工作创建 Django 项目创建应用程序配置项目编写 Consumer编写路由创建 URL 路由运行应用用户认证消息持久化显示历史消息结论 Django Channels 是 Django 的一个扩展&#xff0c;允许在 Web 应用中添加实时功能&#xff0c;例如 Websockets、HTTP2 和其他协议。本…

虚拟机安装 RockyLinux为例

目录 一、VMWare、Xshell、Xftp、LinuxISO资料下载 二、VMWare安装 三、创建虚拟机 四、虚拟机安装过程的问题 一、VMWare、Xshell、Xftp、LinuxISO资料下载 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;6666 二、VMWare安装 三、创建虚拟机 四、虚拟机安装…

企业如何利用智能防止截屏保护商业机密

在数字化时代&#xff0c;企业商业机密的保护变得尤为重要。智能防止截屏技术作为一种先进的数据安全手段&#xff0c;能够帮助企业有效防止商业机密的泄露。本文将探讨企业如何利用这一技术保护其宝贵的商业信息。 一、商业机密面临的威胁 商业机密包括但不限于产品设计方案…

微信小程序毕业设计-电影院订票选座系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

基于单片机的八路抢答器设计论文

绪 论1.1 课题研究的相关背景 抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。现在大多数抢答器均使用单片机(如MCS-5…

中间件解析漏洞及Apache解析漏洞原理和复现

Apache漏洞 Apache HTTPD 多后缀解析漏洞 httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程&#xff0c;它会建立 一个处理请求的子进程或线程的池。 漏洞原理 apache httpd支持一个文件有多个后缀&#xff0c;如&#xff1a;shell.php.d…

【ArcGIS微课1000例】0114:基于DEM地形数据整体抬升或下降高程

相关阅读:【GlobalMapper精品教程】083:基于DEM整体抬升或下降地形高程的两种方式 文章目录 一、任务分析二、栅格计算器简介三、地形整体修改四、注意事项一、任务分析 打开软件,加载配套实验数据中的0112.rar中的dem数据,如下所示,dem的高程范围为256.75~342.37米,现在…

【自然语言处理】文本情感分析

文本情感分析 1 任务目标 1.1 案例简介 情感分析旨在挖掘文本中的主观信息&#xff0c;它是自然语言处理中的经典任务。在本次任务中&#xff0c;我们将在影评文本数据集&#xff08;Rotten Tomato&#xff09;上进行情感分析&#xff0c;通过实现课堂讲授的模型方法&#x…

企业数字化转型顶层设计与企业架构TOGAF9.2认证【鉴定级】

什么是TOGAF TOGAF由国际标准权威组织 The Open Group制定。The Open Group于1993年开始应客户要求制定系统架构的标准&#xff0c;在1995年发表The Open Group Architecture Framework (TOGAF) 架构框架。2022年4月25日发布了TOGAF的最新版本10&#xff0c;目前&#xff0c;T…

如何用TCC方案轻松实现分布式事务一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 哈喽,大家好!我是小米,一个热爱技术的活力小青年,今天要和大家分享的是一种在分布式系统中实现事务的一种经典方案——TCC(Try Confirm Canc…