⚠️️ 整理自互联网,用于概念了解。
MySQL 的架构采用经典的『客户端/服务器模型』和『分层设计』,核心组件协同工作以处理查询、管理数据、保证事务和提供高可用性等。其核心架构通常分为以下几个主要层次和组件,详见官方文档。

连接层
Connectors
连接器 Connectors 是 MySQL 官方提供的驱动程序,用于让不同编程语言编写的应用程序(客户端)能够与 MySQL 服务器通信。它实现了 MySQL 的通信协议,封装了底层连接细节,使开发者无需处理网络传输、数据封包等复杂操作。严格来说连接器是客户端的组件,而非服务端。
服务层
SQL Interface
是 MySQL 服务层的核心组件之一,负责接收客户端发送的 SQL 命令,并将执行结果返回给客户端。是连接客户端请求与数据库内部处理的桥梁。
主要的核心功能有:
- 接收 SQL 命令:客户端通过连接器发送的 SQL 语句首先到达 SQL 接口。支持多种交互协议。
- 分发 SQL 到内部组件:将 SQL 语句交给解析器进行语法和语义分析,生成解析树。解析后的指令交给优化器生成最优执行计划。
- 处理执行结果:接收存储引擎返回的数据(如查询结果集),将结果转换为客户端兼容的格式(如二进制流、表格形式)。通过连接层将结果返回给客户端。
Parser
解析 SQL 语句,检查语法正确性,分解 SQL 为可执行的逻辑单元。
Optimizer
优化 SQL 查询,生成高效的执行计划。基于索引、表统计信息选择最佳执行路径(如选择 JOIN 顺序、索引使用)。
Executor
根据优化器生成的执行计划,调用存储引擎提供的接口来执行操作。如果启用了查询缓存(在 MySQL 5.7 及更早版本中),会先检查查询缓存。
Caches
作用:缓存查询结果以提高性能。功能:命中相同查询直接返回结果(8.0 已移除,推荐外部缓存如 Redis)。
存储引擎层
负责数据的物理存储、检索和管理。MySQL 的核心优势之一是其可插拔的存储引擎架构。存储引擎是表级别的,同一个数据库的不同表可以使用不同的存储引擎。存储引擎通过定义良好的 API 与服务层交互,这些 API 屏蔽了不同引擎实现的差异。
常见引擎:
InnoDB
MySQL 的默认引擎
- 事务支持:完整的 ACID 事务支持。
- 行级锁:提供细粒度并发控制,提高多用户并发性能。
- 外键约束:支持外键关系。
- 崩溃恢复:使用 Write-Ahead Logging (WAL) 和 Redo Log 保证数据一致性和持久性。
- MVCC (多版本并发控制):通过 Undo Log 实现非锁定一致性读,提高并发读性能。
- 聚集索引:数据按主键顺序物理存储,主键查询极快。
关键结构:Buffer Pool (内存缓冲池), Redo Log (重做日志), Undo Log (回滚日志), Doublewrite Buffer (双写缓冲区)。
MyISAM
MySQL 5.5 之前的默认引擎
- 非事务型:不支持事务和行级锁。
- 表级锁:读写操作会锁定整个表,并发写入性能差。
- 全文索引:在早期版本中是优势,现在 InnoDB 也支持。
- 压缩:支持表压缩,适用于只读或读多写少的数据仓库场景。
- 关键文件:.MYD (数据文件),.MYI (索引文件)。
适用场景:只读或读远大于写的简单应用(现在一般推荐使用 InnoDB 或专用引擎)。
Memory
将所有数据存储在内存中,速度极快。表结构在服务器重启后保留,但数据会丢失。使用哈希索引(默认)或 B-Tree 索引。适用于临时表、缓存、会话存储等需要超快访问但可容忍数据丢失的场景。
Archive
专为存储和检索大量很少被引用的历史、归档或审计信息而设计。支持 INSERT 和 SELECT,但不支持 UPDATE, DELETE (通常通过行删除实现,非标准 SQL),不支持索引。数据压缩率非常高。
CSV
将数据以逗号分隔值格式存储在文本文件 (.CSV) 中。可以直接用文本编辑器查看。不支持索引。常用于数据交换。
物理文件层
存储引擎最终将数据、索引、日志等持久化到磁盘上的文件系统。
关键文件类型 (以 InnoDB 为例):
Tablespace Files
每个 InnoDB 表通常对应一个 .ibd 文件 (当 innodb_file_per_table=ON 时),存储表的数据和索引。
系统表空间 (ibdata1):存储数据字典、Undo Log、Doublewrite Buffer 等元数据(取决于配置)。
Redo Log Files
记录所有对数据页的物理修改(事务日志)。用于崩溃恢复和保证事务的持久性 (Durability)。循环写入。
Binary Log Files
由服务层生成,独立于存储引擎。记录所有修改数据的 SQL 语句(或行更改事件)。用于主从复制 (Replication) 和数据恢复 (Point-in-Time Recovery)。
Error Log
记录服务器启动、运行、停止过程中的错误、警告信息。
Slow Query Log
记录执行时间超过阈值的 SQL 语句。
General Query Log
记录所有客户端连接和执行的语句(性能开销大,通常关闭)。
Relay Log
从 Master 接收到的 Binlog 事件临时存储位置。
相关问题
MySQL 连接池是在连接器还是SQL接口层实现?
MySQL 的连接池(Connection Pool)在连接器(Connectors)层实现,而非 SQL Interface 层。这是由 MySQL 的分层架构和各层职责决定的。
- 连接池是客户端侧的连接管理机制,由各语言驱动实现,与服务端解耦,减少 TCP 连接建立和认证的开销。
- SQL Interface 是服务端入口,负责接收已建立的连接传来的 SQL 请求,不管理连接生命周期。
二者通过 TCP 连接 通信,各司其职。