首页 > 数据库 >MySQL逻辑架构图

MySQL逻辑架构图

时间:2023-06-04 15:45:06浏览次数:42  
标签:binlog 逻辑 缓存 redolog 架构图 InnoDB MySQL 日志

整体架构

MySQL可以分为Server层和存储引擎层两部分。
不同的存储引擎(不同的表可以设置不同的存储引擎)共用一个Server层(从连接器到执行器)。

查询流程

连接器

Command列显示Sleep表示空闲连接。

如果客户端太长时间没动静,那么连接器会自动将它断开,由参数wait_timeout控制,默认值是8小时。

查询缓存

针对查询请求,先查询缓存(key是查询的语句,value是查询的结果),缓存中没有时再执行语句,执行结果存入缓存。
缓存弊大于利
更新表后,清空该表上所有查询缓存。针对频繁更新场景,查询缓存的命中率低。
弃用缓存
从MySQL 5.7.20开始,不推荐使用查询缓存,在MySQL 8.0中删除

更新流程

因性能问题而使用redolog

如果每次更新都通过磁盘先找到记录再更新,那么IO成本高。
先写日志,再写磁盘。
更新记录时,InnoDB先把记录写到redolog(重做日志,InnoDB引擎独有的日志),更新内存,InnoDB引擎会在空闲时候把这个操作更新到磁盘。
InnoDB的redolog(类似于黑板)是固定大小的,从头开始写,写到末尾又回到开头继续写。

checkpoint是即将擦除记录的位置,向后推移并循环,擦除记录前把记录更新到磁盘。
write pos是当前记录位置,向后推移并循环,写到3号文件末尾后回到0号文件开头。
write pos和checkpoint之间是空白部分,用于记录新的操作。
如果write pos追上checkpoint,那么表示redolog满了,先擦除记录再后移checkpoint。

redolog重做日志与binlog归档日志区别

1.redolog是InnoDB引擎独有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
2.redolog是物理日志,记录“在某个数据页上做了什么修改”;binlog是逻辑日志,记录语句的原始逻辑,例如“给ID=2这一行的c字段加1 ”。
3.redolog是循环写的,空间固定会用完;binlog是追加写入的,binlog文件写到一定大小后切换到下一个,不覆盖以前的日志。
4.redolog用于MySQL重启恢复,binlog用于MySQL备份恢复。之所以不用binlog来恢复,是因为逻辑日志binlog需要转成物理日志redolog,耗时。

update具体流程

执行update T set c=c+1 where ID=2;
1.执行器通过InnoDB来取ID=2这一行,因为ID是主键,所以InnoDB搜索B+树找到这一行。如果这一行所在的数据页在内存中,那么直接返回给执行器;否则,从磁盘读入内存后返回。
2.执行器把这个值加1。
3.InnoDB把这行新数据更新操作记录到redolog,redolog进入prepare状态。
4.执行器生成这个操作的binlog,把binlog写入磁盘。
5.执行器通过InnoDB来提交事务,InnoDB把redolog改成提交状态,更新完成。

两阶段提交

prepare阶段写入redolog,commit阶段写入binlog。
事务未提交,MySQL重启,redolog和binlog都没有了,事务回滚。
两阶段提交目的是,确保redolog和binlog逻辑一致。
双1配置:redolog(innodb_fush_log_at_trx_commit)和binlog(sync_binlog)在事务提交后同步到磁盘。

事务提交之后,redolog先刷盘,binlog再刷盘。
事务提交之前,MySQL异常重启后,SQL执行没生效。
事务提交之后,redolog超过binlog部分会回滚,因为缺少binlog无法完成主备复制。

标签:binlog,逻辑,缓存,redolog,架构图,InnoDB,MySQL,日志
From: https://www.cnblogs.com/WJQ2017/p/17455776.html

相关文章

  • 数据库管理工具远程连接MySQL实例服务失败Host ... is not allowed to connect to thi
    MySQL社区版数据库8.0版本添加账号、分配权限、删除账号MySQL安全连接失败问题排查......
  • 4、数据库:MySQL部署 - 系统部署系列文章
          MySQL数据库在其它博文中有介绍,包括学习规划系列。今天就讲讲MySQL的部署事情。一、先下载MySQL数据库;到下面这个网址去下载数据库,这里下载的社区版:https://dev.mysql.com/downloads/installer/二、安装数据库;打开EXE文件;       ......
  • mysql-5.6.13在windows平台下的安装、使用(图解)
    一、首先电脑要具备.NetFramework4以上环境二、MySQL下载、安装、执行1.下载http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.13-win32.zip2.安装点击“installMySQLproducts”选中“Iacceptthelicenceterms”,点击next选中“Skipthecheckforupdate......
  • Mysql索引类型介绍
    1.定义索引(index)是帮助Mysql高效获取数据的数据结构2.分类主键索引(Primarykey)唯一的标识,主键不可重复,一个表中只能有一个列作为主键唯一索引(Uniquekey)不能重复,一个表中多个列可以标识为唯一索引常规索引(key/index)默认的索引,可以重复,多个列可以标识为常规......
  • MySQL主从复制
    MySQL主从复制一、复制概述将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。二、复制原理My......
  • 常用的组合逻辑电路
    1编码器1.1编码编码我们可以理解为,根据一定的规则,我们把一个输入A,编码成输出B。比如说ASCII码就是一种编码方式,输入是英文字符,输出是二进制数字。比如字母A的ASCII码为01000001.1.2集成电路中的编码器编码器的特点:1输入2^n个,输出n个1.3普通编码器以4线-2线编码器为例......
  • MySQL 8错误日志出现"The table /home/work/mysql_3306/tmp/#sqla2b_298b06_4d is fu
    ##############    了解MySQL8.0.26的错误日志出现"Thetable /home/work/mysql_3306/tmp/#sqla2b_298b06_4disfu11!"的bug,暂时通过修改临时表的存储引擎为内存引擎解决  MySQL8.0.13开始引入新的临时内存表引擎TempTable,并将其作为内存中创建临时表的默认存储引擎。T......
  • 使用 Node.js 连接 MySQL
    概述当使用Node.js开发Web应用程序时,经常需要与数据库进行交互来存储和检索数据。MySQL是一个流行的关系型数据库管理系统,它提供了强大的功能和性能。本文将介绍如何使用Node.js连接MySQL数据库,并展示一些常见的操作示例。开始在这里我们将使用Node.js的mysql2库来连......
  • MySQL数据库复制技术2
    一:复制的概念。    可能很多人认为,复制很简单就是把之前的数据直接转移到新的数据库当中不就是复制吗。但是在MySQL数据库中:复制指的就是复制一个服务器上(称为主节点服务器或者简称主节点)的所有改变到另一个服务器(称为从节点服务器或简称从节点)。复制通常用来创建主节点的一......
  • 离散数学-数理逻辑
    《离散数学》是计算机专业的一门十分重要的专业基础课。离散数学作为有力的数学工具对计算机的发展、计算机研究起着重大的作用。目前,计算机科学中普通采用离散数学中的一些基本概念、基本思想和基本方法。通过本课程的学习,掌握数理逻辑、集合论、代数和图论等近代数学分支的最基本......