MySQL 核心组件详解
分层结构
组件层级 | 核心功能 | 组件 |
---|---|---|
连接层 | 管理连接、身份验证 | 连接器、身份验证 |
服务层 | SQL 解析、优化、执行 | SQL接口、解析器、查询优化器、查询缓存、执行器 |
存储引擎层 | 数据存储与索引管理 | InnoDB 、MyISAM |
物理存储层 | 文件系统交互 | 表结构、数据、日志 |
组件交互流程图
graph LR
A[客户端]--身份验证--> B[连接器]--SQL接口--> C[解析器]
C--> D[优化器] --查询缓存-->E1{命中?}
E1--是-->A[客户端]
E1--否--> E3[执行器]
E3 --> F[存储引擎]
F --> G[InnoDB]-->I[物理文件]
F --> H[MyISAM]-->I[物理文件]
一、连接层
连接器 (Client Connectors)
功能:管理客户端连接请求,支持多种编程语言(Java、Python、.NET 等)通过 API 建立连接。
行为:为每个连接请求分配独立线程(或使用线程池复用)。
通过
SHOW PROCESSLIST
查看活动连接。身份验证 (Authentication)
流程:验证客户端用户名、IP、密码,并检查用户权限(如数据库/表的操作权限)。
命令示例:
mysql -h$ip -P$port -u$user -p
二、服务层 (Server Layer)
SQL 接口 (SQL Interface)
作用:接收并执行客户端 SQL 命令(如 DML、DDL、存储过程),返回查询结果。
解析器 (Parser)
流程:将 SQL 解析为“解析树”,检查语法合法性(如关键词拼写错误)。
查询优化器 (Optimizer)
功能:将解析树转化为执行计划,优化查询策略(如选择索引、调整 JOIN 顺序)。
示例:
SELECT uid, name FROM user WHERE gender=1; -- 优化器决定先过滤 gender=1,再投影 uid 和 name
查询缓存 (Query Cache)
机制:缓存命中查询结果,直接返回缓存数据(注:MySQL 8.0 已移除该功能)。
执行器 (Executor)
行为:调用存储引擎接口执行优化后的查询计划,返回最终结果集。
三、存储引擎层 (Storage Engines)
插件式引擎架构
支持 InnoDB、MyISAM 等引擎,通过统一 API 与存储引擎交互,屏蔽底层差异。
InnoDB
- 支持事务(ACID)、行级锁、外键约束。
- 数据存储文件为
.ibd
(表空间文件,含结构、数据和索引)。参数示例:
innodb_file_per_table = ON -- 每表独立表空间
MyISAM
- 表级锁、不支持事务,适用于读密集型场景。
- 数据存储文件为
.MYD
(数据)、.MYI
(索引)、.frm
(表结构)。
四、物理存储层
文件系统交互
- 文件类型:
- 表结构文件(
.frm
或.sdi
)。- 日志文件(如
binlog
、redo log
、undo log
)。- 存储路径:通过
datadir
参数指定数据目录。