MySQL逻辑架构图

Posted MC_Hotdog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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%\';

存储层

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

以上是关于MySQL逻辑架构图的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的逻辑架构

MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

MySql优化原理

MySQL Optimization 优化原理

MySQL逻辑架构概述

MySQL的索引优化,查询优化