首先MYSQL是典型的C/S架构,即client/server架构,服务器端使用的mysqld。
不论客户端进程和服务器端进程是采用的哪种通信方式,最后实现的效果都是:客户端向服务器发送一段文本(SQL语句)
,服务器处理后再向客户端发送一段脚本(处理结果)。
①客户端:发起连接
②连接器:建立连接,并验证用户权限
③查询缓存组件(MySQL8.0删除):查询缓存,如果命中则直接返回
③分析器:语法解析,词法解析
④优化器:优化sql语句,生成执行计划,以及索引选择
⑤执行器:调用api,访问存储引擎
⑥存储引擎与文件系统进行交互,查询,修改数据。
⑦将查询结果写入缓存
Connectors指的是不同语言中语sql的交互,MySQL首先是一个网络程序,在TCP只上定义了自己的应用层协议。所以要是用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。
客户端访问MySQL服务器前,第一件事就是建立TCP连接。
经过三次握手后建立连接成功,MySQL服务器对TCP连接传过来的账号密码,做身份验证,权限获取。
● 用户名密码不对,会收到一个Access denied for user错误,客户端程序结束执行
● 用户名密码认证通过,会从权限表查出账号拥有的权限和连接关联,之后的权限逻辑判断,都依赖于此时读到的权限。
TCP连接收到请求后,必须分配给一个线程
专门与这个客户端进行交互。所以还会有一个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建核销会线程的开销。
第二层架构主要完成大多数的核心服务功能。
③查询缓存组件(MySQL8.0删除):查询缓存,如果命中则直接返回
③分析器:语法解析,词法解析
④优化器:优化sql语句,生成执行计划,以及索引选择
⑤执行器:调用api,访问存储引擎
MySQL与其他数据库不同,他提供的是插件是存储引擎
。
存储引擎层是MySQL的“执行者”,负责与磁盘上的数据进行交互。MySQL采用插件式的存储引擎架构,支持多个存储引擎,其中最常用的是InnoDB和MyISAM。
—— 评论区 ——