MySQL服务器端的逻辑架构
MySQL服务器端的逻辑架构
1.服务器处理客户端请求
首先MYSQL是典型的C/S架构,即client/server架构,服务器端使用的mysqld。
不论客户端进程和服务器端进程是采用的哪种通信方式,最后实现的效果都是:客户端向服务器发送一段文本(SQL语句)
,服务器处理后再向客户端发送一段脚本(处理结果)。
①客户端:发起连接
②连接器:建立连接,并验证用户权限
③查询缓存组件(MySQL8.0删除):查询缓存,如果命中则直接返回
③分析器:语法解析,词法解析
④优化器:优化sql语句,生成执行计划,以及索引选择
⑤执行器:调用api,访问存储引擎
⑥存储引擎与文件系统进行交互,查询,修改数据。
⑦将查询结果写入缓存
2.Connectors
Connectors指的是不同语言中语sql的交互,MySQL首先是一个网络程序,在TCP只上定义了自己的应用层协议。所以要是用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。
3.第一层:连接层
客户端访问MySQL服务器前,第一件事就是建立TCP连接。
经过三次握手后建立连接成功,MySQL服务器对TCP连接传过来的账号密码,做身份验证,权限获取。
● 用户名密码不对,会收到一个Access denied for user错误,客户端程序结束执行
● 用户名密码认证通过,会从权限表查出账号拥有的权限和连接关联,之后的权限逻辑判断,都依赖于此时读到的权限。
{callout color="#73aaff"}
思考:一个系统只会和MySQL服务器建立一个TCP连接吗?只能有一个系统和MySQL服务器建立连接吗?
当然不是,多个系统都可以和MySQL服务器建立连接,每个系统建立的连接也不止一个,所以,为了解决TCP无限创建,与TCP频繁创建销毁带来的性能资源开销问题。MySQL服务器有专门的TCP连接池
限制连接数,采用长链接模式
复用TCP连接,来解决问题。
{/callout}
TCP连接收到请求后,必须分配给一个线程
专门与这个客户端进行交互。所以还会有一个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建核销会线程的开销。
4.第二层:服务层(SQL解析与优化层)
第二层架构主要完成大多数的核心服务功能。
③查询缓存组件(MySQL8.0删除):查询缓存,如果命中则直接返回
③分析器:语法解析,词法解析
④优化器:优化sql语句,生成执行计划,以及索引选择
⑤执行器:调用api,访问存储引擎
5.第三层:存储引擎层
MySQL与其他数据库不同,他提供的是插件是存储引擎
。
存储引擎层是MySQL的“执行者”,负责与磁盘上的数据进行交互。MySQL采用插件式的存储引擎架构,支持多个存储引擎,其中最常用的是InnoDB和MyISAM。
- InnoDB
支持事务(ACID)。
使用行级锁,提高并发性能。
提供崩溃恢复功能,适合大多数OLTP(在线事务处理)场景。 - MyISAM
不支持事务。
使用表级锁,适合读多写少的场景。
访问速度快,适合数据分析和全文检索。
其他存储引擎 - Memory:将数据存储在内存中,适合高速临时存储。
NDB:分布式存储引擎,适合集群环境。
MySQL的逻辑架构允许用户根据业务需求选择合适的存储引擎。例如,对于需要高并发和事务支持的场景,可以选择InnoDB;对于读多写少且对性能要求高的场景,可以考虑MyISAM。