MySQL逻辑架构图

大概流程

  1)mysql启动以后,初始化模块就从系统配置文件中读取系统参数和命令参数,初始化整个系统,同时存储引擎也会启动;

  2)初始化结束后,连接管理模块会监听客户端的连接请求,并将连接请求转发给线程管理模块去请求一个连接线程;

  3)线程模块接到请求后会调用用户模块进行授权检查,通过授权以后会检查是否又空闲线程,如果有取出并与客户端连接,如果没有则新建立建立一个线程与客户端连接;

  4)mysql请求分为两种,一种是需要命令解析和分发才能执行,另一种可以直接执行;不管哪种,如果开启了日志,那么日志模块会记录日志;

  5)如果是Query类型的请求,会将控制权交给Query解析器,Query解析器检查是否Select类型,如果是则启动查询缓存模块,如果缓存命中则将缓存数据返回给连接线程模块,连接线程将数据传递到客户端;如果没有缓存或者不是一个可以缓存的查询,此时解析器会进行相应的处理,通过查询分发器给相关的处理模块;

  6)如果解析器结果是DML/DDL,则交给变更模块;如果是检查、修复的查询交给表维护模块,如果是一条没有被缓存的语句,则交给查询优化器模块。实际上表变更模块又分为若干小模块,例如:insert处理器、delete处理器、update处理器、create处理器,以及alter处理器这些小模块来负责不同的DML和DDL。总之,查询优化器、表变更模块、表维护模块、复制模块、状态模块都是根据命令解析器的结果不同而分发给不同的类型模块,最后和存储引擎进行交互。

  7)当一条命令执行完毕后,控制权都会还给连接线程模块,在上面各个模块处理过程中都依赖于核心API模块,比如:内存管理、文件I/O,字符串处理等。

连接层

  最上层是一些客服端和连接服务,包括sock通信和大多数基于客服端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似于连接处理、授权认证及相关安全的方案,在该层上引入了线程池的概念,为通过认证安全接入的客服端提供线程,同样在该层上可以实现基于SSL的安全的连接,服务器也会为安全接入的每个客户端验证它所具有的操作权限。

服务层

  第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析以及优化部分内置函数的执行,所有跨存储引擎的功能也在这一层实现,如过程、函数等,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询的顺序是否利用索引,最后生成相应的执行操作。

引擎层

  存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有功能不同

 1 # 编码
 2 show variables like ‘%char%‘;
 3 +--------------------------------------+----------------------------+
 4 | Variable_name                        | Value                      |
 5 +--------------------------------------+----------------------------+
 6 | character_set_client                 | utf8                       |
 7 | character_set_connection             | utf8                       |
 8 | character_set_database               | latin1                     |
 9 | character_set_filesystem             | binary                     |
10 | character_set_results                | utf8                       |
11 | character_set_server                 | latin1                     |
12 | character_set_system                 | utf8                       |
13 | character_sets_dir                   | /usr/share/mysql/charsets/ |
14 | validate_password_special_char_count | 1                          |
15 +--------------------------------------+----------------------------+
16 9 rows in set (0.01 sec)
17 引擎
18 show engines;
19 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
20 | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
21 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
22 | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
23 | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
24 | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
25 | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
26 | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
27 | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
28 | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
29 | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
30 | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
31 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
32 9 rows in set (0.00 sec)
33
34 show variables like ‘%storage_engine%‘;

存储层

  数据存储层主要是将数据存储在运行与裸设备的文件系统之上,丙烷层与存储引擎的交互

原文地址:https://www.cnblogs.com/Alexephor/p/11637797.html

时间: 10-09

MySQL逻辑架构图的相关文章

mysql 备份模式(1:逻辑架构图)

一.几种Master/Slave逻辑架构图 (Figure1:单Master-单Slave) (Figure2:单Master-多Slave) (Figure3:单Master-级联Slave) (Figure4:Master/Slave部署逻辑图)

MySQL逻辑架构概述

1.MySQL逻辑架构 MySQL逻辑架构图 MySQL逻辑架构分四层 1.连接层:主要完成一些类似连接处理,授权认证及相关的安全方案. 2.服务层:在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,SQL接口,SQL解析,SQL分析优化, 缓存查询的处理以及部分内置函数执行(如日期,时间,数学运算,加密)等等.各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等. 3.引擎层:是底层数据存取操作实现部分,由多种存储引擎共同组成.真正负责MySQL中数

MySQL 高可用+优化 架构图

MySQL 高可用加优化架构图

软件各种架构图2

Spring MVC 核心架构图 架构图对应的DispatcherServlet核心代码如下: //前端控制器分派方法 protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = nu

架构师必备技能:教你画出一张合格的技术架构图

当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况: 对着画布无从下手.删了又来? 如何用一张图描述我的系统,并且让产品.运营.开发都能看明白? 画了一半的图还不清楚受众是谁? 画出来的图到底是产品图功能图还是技术图又或是大杂烩? 图上的框框有点少是不是要找点儿框框加进来? 布局怎么画都不满意…… 如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰. 先厘清一些基础概念 1.什么是架构? 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策. 架构是

程序员必备技能:如何画好架构图?

架构图分类 搜集了很多资料,分类有很多,有一种比较流行的是4+1视图,分别为场景视图.逻辑视图.物理视图.处理流程视图和开发视图. 场景视图 场景视图用于描述系统的参与者与功能用例间的关系,反映系统的最终需求和交互设计,通常由用例图表示. 逻辑视图 逻辑视图用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系 统如何构建的过程,通常由UML的组件图和类图来表示. 物理视图 物理视图用于描述系统软件到物理硬件的映射关系,反映出系统的组件是如何部署到一组可    计算机器节点上

如何画出一张合格的技术架构图?

当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况: 对着画布无从下手.删了又来? 如何用一张图描述我的系统,并且让产品.运营.开发都能看明白? 画了一半的图还不清楚受众是谁? 画出来的图到底是产品图功能图还是技术图又或是大杂烩? 图上的框框有点少是不是要找点儿框框加进来? 布局怎么画都不满意…… 如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰. 先厘清一些基础概念 1.什么是架构? 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策. 架构是

最简单直观的分布式架构图

这张图第一眼看过去非常的空洞,但是我认为却是最理想化的分布式架构图.不管什么样的分布式系统,都是从这套系统上改造演变过去的.下面我就来解释一下这张图每个步骤的意义. 用户群访问某个网站,比如说www.baidu.com,我们先忽略DNS解析和CDN服务器的作用,直接请求服务器,穿过防火墙,通过负载均衡来分配用户的请求,负载可以提高整个架构的抗压和流量的负载能力,将用户请求平均分配到应用服务器,有效的解决了单点失效的问题,通过应用服务器要交互的是数据层,也就是我们所说的MySql或者Oracle,

离线数据分析流程及推荐系统架构图

1.离线数据分析流程 一个应用广泛的数据分析系统:"web日志数据挖掘" 1.1 需求分析 1.1.1 案例名称 "网站或APP点击流日志数据挖掘系统". 1.1.2 案例需求描述 "Web点击流日志"包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率.访客的来源信息,访客的终端信息等. 1.1.3 数据来源 本案例的数据主要由用户的点击行为记录 获取方式:在页面预埋一段js程序