赞
踩
MySQL的逻辑架构主要可分成三部分:连接层、服务层、引擎层,架构图如下:
客户端访问MySQL第一件事就是通过三次握手与服务端建立TCP连接。服务端会有TCP线程池,当收到连接请求后会分配一个线程专门对接这个客户端。在连接成功后,MySQL服务器对TCP中客户端传输过来的账号密码进行身份认证、权限获取。 【TCP】
若是用户名/密码不对,服务端会收到Access denied for user 错误,客户端则执行结束;
用户名、密码认证通过后,服务端会从权限表中查出账号的权限并与客户端连接,后面会根据读到的权限进行权限判断逻辑;
连接层主要职责:身份认证、连接管理、获取权限信息
服务层主要完成大多数核心服务功能:SQL接口、缓存查询、SQL分析和优化、部分内置函数的执行。
1. 接收用户的SQL命令并返回所需查询结果;
2. MySQL支持DML(数据库操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口;
解析器对SQL语句进行语法分析、语义分析,将SQL语句分解成数据结构传递都后续步骤,SQL语句的传递、处理就是基于这个结构;若是在分解中遇到错误,那就说明这个SQL语句不合规;
在SQL命令会被解析器验证和解析,并为其创建语法树,并验证该客户端是否有执行该查询的权限;创建好语法树后,MySQL还会对SQL查询进行语法上的优化,进行重构;
在对SQL语句进行解析后,查询优化器会先确定SQL的执行路径,生成一个执行计划,而后进行查询操作;
执行计划:表明 使用哪些索引进行查询(全表检索 / 索引检索)、表之间的连接顺序如何,最后按照执行计划中的步骤调用存储引擎提供的方法来真正进行查询,并将查询的结构返回给用户;
在MySQL 5.7.20开始,有了查询缓存机制(MySQL 8.0中废除),这使MySQL内部维持一些Cache和Buffer,例如Query Cache用来缓存SELECT语句的执行结果,若是再次使用相同的SELECT语句则直接返回结果给客户端,不用再次进行查询解析、优化和执行的整个过程。
这个缓存是由一系列小缓存组成的(表缓存,记录缓存,key缓存,权限缓存....);
不同客户端之间可共享查询缓存;
MySQL架构在多种不同场景中发挥良好作用主要体系在插件式的存储引擎的架构上;
插件式存储引擎架构将查询处理和其他系统任务及数据存储提取相分离,可以根据业务需求和实际需求选用合适的引擎;同时MySQL还允许开发人员自定义存储引擎。
插件式存储引擎真正负责了MySQL数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。
所有的数据、数据库、表的定义,表的内容、索引,都是存储在文件系统上,以文件的方式存在并完成与存储引擎的交互。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。