MySQL学习-逻辑架构(一)

66 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

前言

上篇我们学习完了MySQL中的角色管理。有兴趣的小伙伴可以阅读(# MySQL学习-角色管理(二))。
下面我们继续学习MySQL中的逻辑架构。

逻辑架构

客户端连接到MySQL的服务器查询数据时,MySQL做了哪些处理呢?

  • 首先需要处理客户端的连接,进行客户端连接的管理。
  • 然后对客户端传来的信息进行解析优化。
  • 最后使用存储引擎进行查询。

连接层

上面提到,客户端想要做查询等工作之前,第一步就是需要先连接到MySQL服务器。建立TCP连接。经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。

  • 用户名或密码不对时,会收到Access denied for user错误,客户端程序结束执行。
  • 用户名密码正确,认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑。都将依赖于此时读到的权限。

TCP链接收到请求后,必须要分配给一个线程专门与这个客户端交互。所以还有一个线程池走后门的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。

服务层

当客户端正确建立连接后,下一步就是解析优化查询语句了,即服务层:

  • SQL Interface:SQL接口。
    • 接收用户的SQL命令,并且返回用户需要查询的结构。比如SELECT...FROM就是调用SQL接口。
    • MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口。
  • Parser:解析器。
    • 在解析器中对SQL语句进行语法分析、语义分析。将SQL语句分解成数据结构,并将这个数据结构传递到后续的步骤,以后SQL语句的传递和处理就是基于这个结构的。如果在分解构成中遇到错误,那么就说明这个SQL语句是不合理的。
    • 在SQL命令传递到解析器的时候会被解析器验证和解析,并为其创建语法树,并根据数据字典丰富查询语法树,会验证该客户端是否具有执行该查询的权限。创建好语法树后,MySQL还会对SQL查询进行语法上的优化,进行查询重写。

今天先学习到这里,明天继续。