深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
MySQL 架构详解
MySQL 的架构自顶向下大致可以分为四个主要层次:
1. 网络连接层
网络连接层负责处理客户端与MySQL服务器之间的通信:
- 连接管理:处理客户端连接请求,包括身份验证
- 线程管理:使用线程池技术处理并发连接
- 协议支持:支持多种连接协议(TCP/IP、Unix socket等)
- 连接缓存:维护连接状态信息
2. 服务层
服务层是MySQL的核心处理层:
- SQL接口:接收SQL语句,提供DDL、DML、存储过程等接口
- 解析器:进行词法分析和语法分析,生成解析树
- 查询优化器:对SQL进行优化,选择最优执行计划
- 缓存管理:管理查询缓存
3. 存储引擎层
存储引擎层负责数据的存储和提取:
- InnoDB:支持事务、行级锁、外键,是MySQL 5.5后的默认引擎
- MyISAM:不支持事务,但查询性能高
- Memory:数据存储在内存中,速度快但服务重启后数据丢失
主流存储引擎比较
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 默认版本 | MySQL 5.5后 | MySQL 5.5前 |
| 事务支持 | 支持 | 不支持 |
| 锁级别 | 行级锁 | 表级锁 |
| 外键支持 | 支持 | 不支持 |
4. 系统文件层
系统文件层负责将数据持久化到物理存储设备:
- 数据文件:.ibd文件(InnoDB)、.myd文件(MyISAM)
- 日志文件:redo log、undo log、binlog
- 配置文件:my.cnf/my.ini
日志文件
- 错误日志:记录MySQL服务启动、运行或停止时的错误信息
- 通用查询日志:记录所有到达MySQL服务器的SQL语句
- 二进制日志:记录所有更改数据的SQL语句,用于主从复制和数据恢复
- 慢查询日志:记录执行时间超过阈值的SQL语句
服务层 - 六大关键组件
连接池 (Connection Pool)
- 管理所有客户端与数据库的连接资源
- 采用线程池技术,支持连接复用
SQL接口
- 支持的命令类型:DML、DDL、存储过程、视图操作
解析器 (Parser)
- 词法分析将SQL语句分解为tokens
- 语法分析构建解析树
- 语义检查验证表/列是否存在
查询优化器 (Optimizer)
- 基于成本的优化(CBO)
- 索引选择优化
- 子查询优化
缓存 (Cache & Buffer)
- 查询缓存、表缓存、记录缓存、权限缓存
- 注意:MySQL 8.0已移除查询缓存功能