1. 逻辑架构图
1.1 Connectors
1.2 连接层
客户端在访问MySQL
服务器前,做的第一件事情就是建立TCP连接
经过三次握手建立连接成功之后,MySQL服务器会对TCP传输过来的账号密码做身份认证,权限获取。
- 如果账号密码不正确,则报出错误,同时,客户端程序结束执行。
- 账号密码认证通过后,会从权限表中查询出用户对应的权限。
TCP
连接收到请求以后,会分配一个线程专门和这个客户端进行交互,因此还会有一个线程池。
从线程池中去获取线程,省去了创建和销毁的线程的时间开销
1.3 服务层
- SQL接口:
- 用来接收用户的SQL命令,并返回执行SQL后的结果
- 解析器:
- 在解析器中对SQL语句进行语法分析、语义分析,将SQL语句拆分成数据结构,并将此数据结构传递给后续步骤执行。
- SQL语句的错误一般是在解析的时候发现的
- 在SQL命令传递到解析器的时候,解析器会为其创建
语法树
,如果有优化方案,MySQL还会对SQL查询的方法进行一定的优化
- 查询优化器:
- SQL语句在语法解析之后,查询之前会使用查询优化器确定SQL的执行方法,生成一个
执行计划
执行计划
应该表明使用哪些索引进行查询、表之间的连接顺序如何。最后会按照执行计划
中的步骤调用存储引擎提供的方法来执行真正的查询,并将结果通过SQL接口返回给用户
- SQL语句在语法解析之后,查询之前会使用查询优化器确定SQL的执行方法,生成一个
- 查询缓存组件:
- MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过程了,直接将结果反馈给客户端。
- 缓存机制由一系列的小缓存组成,比如表缓存,记录缓存,key缓存等等
- 查询缓存可以在不同的客户端之间进行共享。
- 在MySQL5.7.20开始,不再推荐使用查询缓存,并在
MySQL8.0
中,此组件被删除1.4 引擎层
MySQL的引擎层被称为:插件式存储引擎层
,真正负责了MySQL数据的存储和读写,对维护在物理服务器上的底层数据执行操作1.5 存储层(文件层)
MySQL的数据文件就存放在物理服务器的磁盘上