在前面的系列文章中,我们讲解了MySQL基础功能相关的知识,在这篇文章中,重点讲讲MySQL的整体架构,以便在后续的学习中更好的了解所讲的功能属于MySQL的哪一部分,以及前后相关的工作流程。
MySQL整体架构图
这里我们以MySQL官方提供的整体架构图为基准,确保知识的权威性和准确性。

通过上图,我们可以看到,MySQL架构设计总共分为四层,分别是客户端层,服务层,存储引擎层与系统文件层。
下面,我们就来看看各层的详细功能及特性。
客户端层
客户端层是MySQL架构中的最顶层,即架构图中的MySQL Connectors部分。客户端通过客户端层向服务器发送请求指令。
客户端可以通过命令行或者图形化界面(GUI),利用有效的MySQL命令和表达式向服务器发起请求。如果指令有效,则会返回结果。
客户端层的主要服务包括:
- 连接处理(Connection Handling) :当客户端向服务器发送请求时,服务器接收请求并与客户端建立连接。一旦连接建立,服务器会为客户端分配一个线程来处理其请求,所有来自客户端的查询都会通过这个线程执行。
- 身份验证(Authentication) :在客户端连接到MySQL服务器时,身份验证会在服务器端进行。这通常通过用户名和密码进行验证。
- 安全性(Security) :在成功进行身份验证后,MySQL服务器会验证客户端是否拥有权限执行特定的查询操作,从而保障系统的安全性。
客户单除了命令行和图形化界面之外,几乎支持所有主流的服务端语言,例如:Java、C、C++、Python等,都是通过各自的API接口与MySQL建立连接。
服务层
服务器层是MySQL架构中的第二个层,负责MySQL关系型数据库管理系统的所有逻辑功能。服务器层也被称为"MySQL架构的大脑"。当客户端发出请求指令后,服务器会检查指令是否匹配,并尽快返回结果。
服务器层包括以下子模块:
- 线程处理(Thread Handling) :服务器层中的线程处理模块为每个连接的客户端提供独立线程,所有来自客户端的查询都由客户端的线程执行并由这个模块管理。
- 解析器(Parser) :解析器是一种软件组件,它通过解析输入生成数据结构(解析树)。在解析之前,还会执行词法分析,将输入分解为多个标记(tokens)。接着,解析器通过语法分析和语义分析生成最终的解析树。
- 优化器(Optimizer) :解析完成后,优化器模块会应用多种优化技术。这些技术可能包括重写查询、调整表扫描顺序或选择合适的索引等。优化器的目标是优化查询执行效率。
- 查询缓存(Query Cache) :查询缓存模块存储客户端输入查询的完整结果集。在解析之前,MySQL服务器会首先检查查询缓存。如果缓存中存在与输入查询完全相同的结果,服务器会跳过解析、优化和执行过程,直接返回缓存结果。
- 缓冲与缓存(Buffer and Cache) :缓冲和缓存模块存储用户之前执行的查询。当用户输入新的查询时,查询缓存会检查是否有相同的查询记录。如果有记录,系统将直接返回结果,而无需解析、优化和执行。
- 表元数据缓存(Table Metadata Cache) :元数据缓存是一个保留内存区域,用于跟踪数据库、索引或对象的信息。当打开的数据库、索引或对象数量增加时,元数据缓存的大小也会随之增大。
- 键缓存(Key Cache) :键缓存用于唯一标识缓存中的对象。默认情况下,边缘服务器会基于资源路径和查询字符串缓存内容。
需要注意的是,从MySQL 5.7.20开始,查询缓存已被弃用,并在MySQL 8.0中被删除。通常,缓存只适用于表数据不会经常变动的场景,如果表数据经常更新(大多数场景),缓存命中率低下,加上频繁的维护缓存,有时候造成的问题比解决的问题还要多,因此,缓存的功能就显得比较鸡肋了。
存储引擎层
存储层,又称存储引擎层,它是真正负责MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。
存储引擎层是MySQL架构中的独特层级,它使MySQL成为开发者的优选数据库。存储层提供了高度可定制的存储引擎功能,比如InnoDB、MyISAM、NDB和Memory等。
根据不同的情况和需求,用户可以选择适合的存储引擎。这些存储引擎是可插拔的,用户创建的表可以绑定到对应的存储引擎上。
InnoDB存储引擎
基本功能特性:
- InnoDB是MySQL的默认事务性存储引擎,也是最重要且被广泛使用的存储引擎。
- 它特别适用于处理大量短暂事务,性能高且支持自动崩溃恢复。
- 数据存储在独立的表空间中,可以由多个数据文件组成。
- 表以簇式索引存储,主键查找速度极快。次级索引包含主键列,因此建议尽量设计较小的主键以优化性能。
MyISAM存储引擎
基本功能特性:
- MyISAM是MySQL 5.1及以前版本的默认引擎,具有功能全面、支持全文索引及GIS(地理信息)功能等特点。
- 不支持事务和行级锁,并且缺乏崩溃恢复能力。
- 如果表是只读或者表较小,可以考虑使用MyISAM。
- 每个表的存储文件通常包括两个:数据文件(.MYD扩展名)和索引文件(.MYI扩展名)。
其他内置存储引擎
基本功能特性:
- Archive引擎:适用于只需要INSERT和SELECT查询的场景,例如日志记录。因为它使用zlib压缩数据,所以磁盘I/O非常低。
- Blackhole引擎:不实际存储数据,仅记录传入的查询,适用于日志记录和测试。
- CSV引擎:支持使用CSV格式的数据表,方便与外部程序直接共享数据。
- Federated引擎:充当其他服务器之间的中介,通过客户端连接查询远程表。
- Memory引擎:将所有数据存储在内存中,适用于需要快速访问且数据不需要持久化的场景。
- Merge引擎:作为MyISAM的变体,允许合并多个类似表到一个虚拟表。
- NDB Cluster引擎:实现分布式、高可用、故障容错的集群存储。
第三方存储引擎
MySQL的可插拔存储引擎API允许开发者根据具体需求设计自己的存储引擎,例如OLTP存储引擎、列式存储引擎等。
系统文件层
数据存储层,在三层架构中,也有归于存储引擎层的说法,主要是将数据存储在运行于设备的文件系统之上, 并完成与存储引擎的交互。
基础功能特性:
- 负责将数据以文件的形式存储在文件系统上。
- 存储引擎通过这个层与磁盘上的数据文件进行交互。
- 主要包含数据文件 (
.frm
,.ibd
) 和日志文件(如binlog
,redo log
,error log
)、配置文件、MySQL的进行pid文件和socket文件等。
小结
这篇文章我们从架构的维度,粗粒度的梳理了MySQL实现的基础架构。当后续继续学习MySQ相关的功能特性时,可以更好的定位到相应的功能位于架构中的哪一层以及它们前后所涉及到的分层以及关系。