1、MySQL服务器处理客户端请求
- MySQL是典型的C/S架构,服务端程序使用 mysqld。
- 实现效果:客户端进程像服务端发送(SQL语句),服务器进程处理后再像客户端进程发送 处理结果。
2、connectors
- 指不同语言中与SQL的交互
- MySQL是一个网络程序,再TCP上定义了自己的应用层协议,编写相关代码与MySQL server建立TCP连接
- 通过调用
SDK
(本质是再TCP连接上通过MySQL协议进行交互),即不同语言的MySQL Connector,或者ODBC
3、连接层
客户端访问MySQL服务器之前,会先建立TCP连接,经过三次握手连接成功后,MySQL服务器对TCP传输过来的信息做身份认证及权限获取
- 用户或密码不正确,会收到
Access denied for user
错误,客户端程序结束执行 - 认证通过,会从权限表获取账号拥有的权限与连接关联,之后的权限判断逻辑都依赖与此时读取到的相关权限
- MySQL服务器有专门的
TCP连接池
限制连接数,采用长连接模式
复用TCP连接
4、服务层
在该层服务器会 解析查询
并创建相应的内部 解析树
,并完成相应的 优化
,如确定查询顺序,是否使用索引等。如果是select
语句,会 查询内部缓存
SQL Interface:SQL接口
①接受用户SQL命令并返回用户需要查询的结果。
②支持DML,DDL、存储过程、视图、触发器、自定义函数等SQL语言接口Parser:解析器
①在解析器中对SQL语句进行语法分析、语义分析,并将SQL语句分解成数据结构
,将该数据结构传递到后续步骤,后续的传递和处理都基于该 数据结构
②SQL语句传递到解析器的时候会被解析器验证和解析
,并创建语法树
,然后更具数据字典丰富查询语法树,会验证该客户端是否具有执行的权限。
③创建语法树后,MySQL会对SQL查询进行语法上的优化,进行查询重写Optimizer:查询优化器
①SQL语句在语法解析后查询之前会使用查询优化器确定SQL语句的执行路径并生成执行计划
②该执行计划须表明使用那些索引
进行查询(全表检索或索引检索
),相关表之间的连接顺序是什么,并按照执行计划中的步骤调用存储引擎
提供的方法去执行SQL语句,最后将执行结果返回给用户。
③会使用选取-投影-连接
策略进行处理。Caches & Buffers :查询缓存组件
①MySQL服务器维持着一些查询相关缓存组件,在进行查询语句时如果在缓存中读取到对应的查询结果,就不必进行解析、优化、执行的整个过程,会直接将结果返回给用户
②缓存机制是由一系列小缓存组成的,比如 表缓存,key缓存,权限缓存等
③该缓存可在不同客户端之间共享
④MySQL 8.0中删除
5、引擎层
- 插件式存储引擎 架构将查询处理和其它的系统任务及数据的存储提取相分离
允许开发者 设置存储引擎
正真负责MySQL服务器中数据的存储和提取,对物理服务器级别维护的底层数据执行操作
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.24 sec)
6、存储层
- 所有的数据、数据库、表的定义及相关数据,索引都是存在
文件系统
上,以文件
的形式存在,并完成与存储引擎的交互。 - 在文件系统下,可以使用本地磁盘,使用DAS、NAS、SAN等各种存储系统