mysql基本架构_mysql数据库管理系统基本架构有哪4大模块 - CSDN
精华内容
参与话题
  • mysql一:基本架构

    2020-07-10 11:33:13
    mysql基本架构 mysql分为server层和存储引擎层: 1、server层包括连接器、查询缓存、分析器、优化器、执行器 连接器:mysql -h$ip -P$port -u$user -p负责管理连接权限验证。 连接时间超过一定值没有操作会自动断开...

    mysql基本架构

    img

    mysql分为server层和存储引擎层:
    server层主要做mysql功能层面的事情,引擎层负责存储的相关事宜

    1、server层包括连接器、查询缓存、分析器、优化器、执行器

    连接器:mysql -h$ip -P$port -u$user -p负责管理连接权限验证。

    连接时间超过一定值没有操作会自动断开,默认为8h。

    连接过程一般比较复杂,所以建议使用长连接。但是建立过多长连接会占用大量内存空间,内存占用过大会导致重启。因为在执行过程中临时使用的内存管理在连接对象里,这些内存只有断开连接才会被释放。解决方法为重连或5.7以上版本可通过mysql_reset_connection 重新初始化连接资源

    **查询缓存:**执行过的sql会以key-value形式添加到缓存,如果在缓存中查询到直接返回结果。但是表更新会使缓存失效,所以说缓存失效非常频繁,缓存查询弊大于利。可以将参数 query_cache_type 设置成DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。8.0以上版本已将查询缓存部分删除

    **分析器:**对sql语句进行词法语法分析,字符串分别代表什么

    **优化器:**执行计划生成,索引选择。表里有多个索引决定使用哪个索引,多表关联决定各个表连接顺序
    **执行器:**操作引擎,返回结果

    2、存储引擎层负责提取和存储数据。支持innodb,MyISAM,memory等多个存储引擎

    展开全文
  • MySQL基本逻辑架构

    2020-08-07 22:24:53
    MySQL基本逻辑架构 从宏观上来看,MySQL基础架构可以分为:Server层和存储引擎层。 Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间...

    从宏观上来看,MySQL基础架构可以分为:Server层和存储引擎层

    在这里插入图片描述

    Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

    存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。

    连接器

    在使用MySQL之前,肯定要连接上它,这时候客户端就需要通过连接器获取一个连接,使用这个连接与MySQL建立联系。后续所有对数据库的操作都是通过这一步建立起的连接来进行的。

    查询缓存

    上一步建立完连接,那么开始我们的MySQL之旅吧,可能大家首先会想到的是查询一条记录。当MySQL接收到一个查询请求时,它都会做哪些操作呢

    • 首先会去查询缓存中看看之前有没有执行过这个查询语句,如果有,则直接返回客户端结果
    • 如果查询缓存中没有相应的查询语句,则进行下一步的操作,即分析器开始工作

    需要注意的是,MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0开始彻底没有这个功能了。

    分析器

    通过上一步的查询缓存,MySQL发现没有命中查询缓存,此时MySQL就要开始执行此次的查询请求了。首先,MySQL需要知道当前是一个什么样的请求,即需要对当前SQL语句进行分析。

    分析器的工作分为两步:

    • 词法分析, MySQL首先分析当前由多个字符串和空格组成的一条SQL语句,MySQL需要识别出里面的字符串分别是什么,代表什么 。比如MySQL怎么知道是查询请求呢?MySQL在做完词法分析后,会把select关键字识别到,进而知道当前请求是一个查询请求
    • 语法分析,根据词法分析的结果,语法分析器根据语法规则判断当前这个SQL语句是否符合MySQL的语法,如果不符合语法规则, 就会收到“You have an error in your SQL syntax”的错误提醒

    优化器

    到这一步,说明此次请求是符合MySQL语法的且MySQL也知道了具体请求。换句话说,到这一步,MySQL已经知道客户想要做什么操作了。

    不过虽然MySQL知道客户想要做什么操作了,但是为了更高性能的处理这个请求,MySQL还需要经过优化器的处理。比如,当前表中有多个索引,优化器会根据一些规则来自动判断出走哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序

    优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。

    执行器

    MySQL通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

    开始执行的时候,要先判断一下你对这个表T有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示(在工程实现上,如果命中查询缓存,会在查询缓存放回结果的时候,做权限验证。查询也会在优化器之前调用precheck验证权限)。

    select * from T where ID=10;
    ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T'
    

    如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

    比如我们这个例子中的表T中,ID字段没有索引,那么执行器的执行流程是这样的:

    1. 调用InnoDB引擎接口取这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这行存在结果集中;
    2. 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
    3. 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

    ,直到取到这个表的最后一行。
    3. 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

    至此,这个语句就执行完成了。

    展开全文
  • MySQL 常用架构

    千次阅读 2018-07-03 11:12:52
    mysql主从复制 此种架构,一般初创企业比较常用,也便于后面步步的扩展 此架构特点: 1、成本低,布署快速、方便 2、读写分离 3、还能通过及时增加从库来减少读库压力 4、主库单点故障 5、数据一致性问题...

    mysql主从复制

    此种架构,一般初创企业比较常用,也便于后面步步的扩展

    这里写图片描述

    此架构特点:
    1、成本低,布署快速、方便
    2、读写分离
    3、还能通过及时增加从库来减少读库压力
    4、主库单点故障
    5、数据一致性问题(同步延迟造成)

    MySQL+MMM架构

    通过 DRBD 基于 block 块的复制模式,快速进行双主故障切换,很大程度上解决主库单点故障问题

    这里写图片描述

    此架构特点:
    1、高可用软件可使用 Heartbeat, 全面负责 VIP、数据与 DRBD 服务的管理
    2、主故障后可自动快速切换,并且从库仍然能通过 VIP 与新主库进行数据同步
    3、从库也支持读写分离,可使用中间件或程序实现

    MySQL+DRDB架构

    MHA 目前在 Mysql 高可用方案中应该也是比较成熟和常见的方案,它由日本人开发出来,在 mysql 故障切换过程中,MHA 能做到快速自动切换操作,而且还能最大限度保持数据的一致性

    这里写图片描述

    此架构特点:
    1、安装布署简单,不影响现有架构
    2、自动监控和故障转移
    3、保障数据一致性
    4、故障切换方式可使用手动或自动多向选择
    5、适应范围大(适用任何存储引擎)

    MySQL+MHA架构

    MMM 即 Master-Master Replication Manager for MySQL(mysql 主主复制管理器),是关于 mysql 主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能基于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟 ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
    MySQL 本身没有提供 replication failover 的解决方案,通过 MMM 方案能实现服务器的故障转移,从而实现 mysql 的高可用。

    这里写图片描述

    此方案特点:
    1、安全、稳定性较高,可扩展性好
    2、 对服务器数量要求至少三台及以上
    3、 对双主(主从复制性要求较高)
    4、 同样可实现读写分离

    欢迎到我的网站看更多文章

    展开全文
  • MySQL 基本架构

    千次阅读 2020-05-31 18:58:03
    下图是 MySQL基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等...

    下图是 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。

    在这里插入图片描述

    MySQL 可以分为 Server 层存储引擎层两部分。

    Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等,还有一个通用的日志模块 binlog

    存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。InnoDB 引擎有自有的日志模块 redolog

    不同的存储引擎共用一个Server 层

    Server 层基本组件

    连接器

    连接器主要和身份认证权限相关的功能相关。

    主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

    查询缓存

    MySQL 8.0 版本后移除。

    查询缓存主要用来缓存之前所执行的 SELECT 语句以及该语句的结果集。

    连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询语句,Value 是结果集。如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。

    MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如对一个表更新的话,这个表上的所有的查询缓存都会被清空。对于不经常更新的数据来说,使用缓存还是可以的。

    所以,一般在大多数情况下都是不推荐去使用查询缓存的。

    MySQL 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。

    分析器

    MySQL 没有命中缓存,就会进入分析器,分析器主要是用来分析 SQL 语句是来干嘛的,分析器也会分为几步:

    第一步,词法分析,一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。

    第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法。

    完成这 2 步之后,MySQL 就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。

    优化器

    优化器的作用就是以它认为的最优的执行方案去执行(有时候可能也不是最优),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。

    可以说,经过了优化器之后可以说这个语句具体该如何执行就已经定下来。

    执行器

    当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。

    语句分析

    img

    查询语句

    说了以上这么多,那么究竟一条 sql 语句是如何执行的呢? sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。先分析下查询语句,语句如下:

    select * from tb_student A where A.age='18' and A.name='张三';
    

    分析下这个语句的执行流程:

    1. 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL 8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。

    2. 通过分析器进行词法分析,提取 sql 语句的关键元素,比如提取上面这个语句是查询 select,提取需要查询的表名为 tb_student,需要查询所有的列,查询条件是这个表的 id=‘1’。然后判断这个 sql 语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。

    3. 接下来就是优化器进行确定执行方案,上面的 sql 语句,可以有两种执行方案:

      a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。
      b.先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。

      那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为的,有时候不一定最好)。那么确认了执行计划后就准备开始执行了。

    4. 进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。

    更新语句

    接下来看一条更新语句如何执行的,sql 语句如下:

    update tb_student A set A.age='19' where A.name=' 张三 ';
    

    来给张三修改下年龄,在实际数据库肯定不会设置年龄这个字段的,不然要被技术负责人打的。

    因为年龄每年都会变的,可以保存一个出生日期,就可以直接算出来,而不用维护一个每年都要变的字段。

    其实这条语句也基本上会沿着上一个查询的流程走,只不过执行更新的时候肯定要记录日志,这就会引入日志模块,MySQL 自带的日志模块是 binlog(归档日志) ,所有的存储引擎都可以使用,InnoDB 引擎还自带了一个日志模块 redo log(重做日志),就以 InnoDB 模式下来探讨这个语句的执行流程。流程如下:

    1. 先查询到张三这一条数据,如果有缓存,也是会用到缓存。

    2. 然后拿到查询的语句,把 age 改为 19,然后调用引擎 API 接口,写入这一行数据,InnoDB 引擎把数据保存在内存中,同时记录 redo log,此时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,随时可以提交。

    3. 执行器收到通知后记录 binlog,然后调用引擎接口,提交 redo log 为提交状态。

    4. 更新完成。

    为什么要用两个日志模块,用一个日志模块不行吗?

    这是因为最开始 MySQL 并没有 InnoDB 引擎( InnoDB 引擎是其他公司以插件形式插入 MySQL 的) ,MySQL 自带的引擎是 MyISAM,但是 redo log 是 InnoDB 引擎特有的,其他存储引擎都没有,这就导致会没有 crash-safe 的能力(crash-safe 的能力即使数据库发生异常重启,之前提交的记录都不会丢失),binlog 日志只能用来归档

    并不是说只用一个日志模块不可以,只是 InnoDB 引擎就是通过 redo log 来支持事务的。那么,又会有同学问,我用两个日志模块,但是不要这么复杂行不行,为什么 redo log 要引入 prepare 预提交状态?这里我们用反证法来说明下为什么要这么做:

    • 先写 redo log 直接提交,然后写 binlog,假设写完 redo log 后,机器挂了,binlog 日志没有被写入,那么机器重启后,这台机器会通过 redo log 恢复数据,但是这个时候 binlog 并没有记录该数据,后续进行机器备份的时候,就会丢失这一条数据,同时主从同步也会丢失这一条数据。
    • 先写 binlog,然后写 redo log,假设写完了 binlog,机器异常重启了,由于没有 redo log,本机是无法恢复这一条记录的,但是 binlog 又有记录,那么和上面同样的道理,就会产生数据不一致的情况。

    如果采用 redo log 两阶段提交的方式就不一样了,写完 binglog 后,然后再提交 redo log 就会防止出现上述的问题,从而保证了数据的一致性。那么问题来了,有没有一个极端的情况呢?假设 redo log 处于预提交状态,binglog 也已经写完了,这个时候发生了异常重启会怎么样呢? 这个就要依赖于 MySQL 的处理机制了,MySQL 的处理过程如下:

    • 判断 redo log 是否完整 (commit),如果判断是完整的,就立即提交。
    • 如果 redo log 只是预提交但不是 commit 状态,这个时候就会去判断 binlog 是否完整,如果完整就提交 redo log, 不完整就回滚事务。

    这样就解决了数据一致性的问题。

    总结

    • 查询语句执行流程如下:权限校验(如果命中缓存)–> 查询缓存 —> 分析器 --> 优化器 —> 权限校验 —> 执行器 —> 引擎
    • 更新语句执行流程如下:分析器 —> 优化器 —> 权限校验 —> 执行器 —> 引擎 —> redo log(prepare) —> binlog —> redo log(commit)
    展开全文
  • mysql 基本架构

    2019-08-16 03:24:14
    大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服 务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),...
  • MySQL基本架构

    千次阅读 2019-02-17 21:23:06
    MySql基本架构示意图如下: 一、MySQL总体上可分为Server层和存储引擎层。 Server层包括连接器、查询器、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、...
  • MySQL 基本架构概览

    2019-08-15 00:33:07
    下图是 MySQL 的一个简要架构图,从下图可以清晰的看到 SQL 语句在 MySQL 内部是如何执行的。 先简单介绍下图涉及的一些组件的基本作用,后面还会详细介绍到这些组件的作用。 连接器: 身份认证和权限相关(登录 ...
  • MySQL | 01、MySQL基本架构示意图

    千次阅读 2018-12-01 13:24:40
    1.MySQL基本架构示意图 大体来说,MySQL主要可以分为Server层和存储引擎两部分。 Server层中主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大部分核心功能服务,以及所有的内置函数(入...
  • MySQL基本架构

    2019-12-21 13:59:32
  • Mysql基本架构

    2020-03-14 15:28:05
    Mysql基本架构图 Mysql8.0之后不存在查询缓存 Mysql分为三个部分:客户端,服务端,存储引擎
  • 一、mysql基本结构

    2020-02-02 09:04:18
    server层涵盖mysql的大多数核心服务功能,以及所有的内置函数(时间、日期、数学、加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等 存储引擎层: 负责数据的存储和提取; .....
  • MySQL基础架构分析

    多人点赞 2019-08-05 09:24:59
    MySQL基础架构分析前言MySQL基本架构图Server层连接器查询缓存分析器优化器执行器存储引擎层 前言 本文将向大家介绍MySQL中的各种组件以及它们的功能,首先来看一张简要的架构图 MySQL基本架构图 在上图中我们可以...
  • (一)MySQL体系架构

    千次阅读 2019-02-19 09:59:36
    (一)MySQL体系架构 目录 一、MySQL体系结构 二、MySQL内存结构 三、MySQL文件结构 四、Innodb体系结构 1.MySQL体系结构 由图,可以看出MySQL最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、...
  • mysql基本结构

    千次阅读 2020-08-25 14:40:04
    mysql基本结构 首先需要介绍一下mysql这个大家伙,他就是我们的大工厂,我们都是为他打工的,我先说一下我们这些存储数据的公司们分为磁盘类型和内存类型的,一般内存类型的公司效率更高一些,你使用了他们家的...
  • MySQL基本架构

    2019-08-17 23:31:02
    为什么我们需要先学习 MySQL 的基础架构呢? 原因很简单,当我们需要了解一件事物的时候,我们只有站在宏观的层面,才能层层剥丝抽茧的去理解问题。举个例子,我们要看一个框架的源码,一开始就想进去研究,却发现找...
  • MySQL--基本存储结构

    2019-04-07 15:03:27
    ###MySQL 基本存储结构 每个数据页可以组成一个双向列表 每个数据页中的记录又可以组成一个单向列表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录使用二分法...
  • MySQL-查询优化

    千次阅读 2019-01-01 10:53:33
    对于刚入行的程序猿来说,如何优化MySQL查询,是必须跨过的坎。网上有很多关于SQL优化的博文,但大多是片段和结论。这里,我摘抄了《高...一、MySQL基本架构 1、基本架构组成 Server层:包括连接器、查询缓存、...
  • MySQL基本架构 MySQL目录结构 •build: 内含有各个平台、各种编译器下进行编译的脚本。如compile-pentium-debug表示在pentium架构上进行调试编译的脚本。 •client: 客户端工具,如mysql,...
  • Mysql逻辑体系架构

    千次阅读 2019-07-05 10:14:46
    1.MySQL整体逻辑架构 mysql 数据库的逻辑架构如下图 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。 第二层值得...
  • MySQL逻辑架构及性能优化原理

    千次阅读 多人点赞 2017-08-01 18:52:17
    说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、...MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务
1 2 3 4 5 ... 20
收藏数 267,160
精华内容 106,864
关键字:

mysql基本架构