MySQL分为四层架构,从上到下依次是:
1. 连接层(Connection Layer)
作用:处理客户端连接和权限验证
客户端连接 → 连接池 → 权限验证 → 分配线程
关键点:
- 管理连接池
- 用户认证、权限校验
- 线程复用
2. 服务层(Service Layer)- Server层
作用:SQL的核心处理层
包含模块:
-
查询缓存:缓存SELECT结果(MySQL 8.0已移除)
-
解析器:词法分析、语法分析,检查SQL是否合法
-
优化器:选择最优执行计划(用哪个索引、表连接顺序)
-
执行器:调用存储引擎接口执行SQL
SQL → 解析器 → 优化器 → 执行器 → 调用引擎
3. 存储引擎层(Storage Engine Layer)
作用:真正负责数据的存储和读取
常见引擎:
- InnoDB:支持事务、行锁、外键(默认引擎)
- MyISAM:不支持事务,只有表锁
- Memory:数据存内存,速度快但不持久化
sql
-- 查看引擎
SHOW ENGINES;
-- 创建表时指定
CREATE TABLE users (...) ENGINE=InnoDB;
4. 文件系统层(File System Layer)
作用:持久化存储
包含文件:
- 数据文件 :
.ibd(表数据和索引) - 日志文件:redo log、undo log、binlog
- 配置文件 :
my.cnf - 错误日志、慢查询日志等
一条SQL的执行流程
以 SELECT * FROM users WHERE id = 1 为例:
1. 连接层:验证权限
↓
2. 服务层:
- 解析器:检查SQL语法
- 优化器:决定使用主键索引
- 执行器:调用InnoDB接口
↓
3. 存储引擎层:
- InnoDB读取数据页
- 返回结果给执行器
↓
4. 返回客户端
面试回答模板
简洁版(30秒):
MySQL分为四层:连接层 负责连接管理和权限验证;服务层 是核心,包括解析器、优化器、执行器,处理SQL逻辑;存储引擎层 负责数据存储,InnoDB支持事务;文件系统层负责持久化。一条SQL从连接验证→解析优化→执行→引擎读取数据→返回结果。
详细版(1分钟):
MySQL采用分层架构:
- 连接层:管理客户端连接池,做权限认证
- 服务层 :Server层,是SQL处理的核心
- 解析器做词法语法分析
- 优化器选择最优执行计划
- 执行器调用存储引擎接口
- 存储引擎层:可插拔设计,InnoDB是默认引擎,支持事务、行锁、MVCC
- 文件系统层:数据最终持久化,包括数据文件、redo log、binlog等
这种分层设计实现了存储引擎可插拔,同一个Server层可以对接不同的引擎。
补充知识点(可能追问)
Q1: 为什么要分层?
A:职责分离,存储引擎可插拔,不同业务场景选择不同引擎
Q2: Server层和引擎层的区别?
A:
- Server层:处理SQL逻辑,所有引擎共享
- 引擎层:负责数据存储,不同引擎实现不同
Q3: binlog在哪一层?
A:Server层(所以所有引擎都有binlog)
Q4: redo log在哪一层?
A:存储引擎层(只有InnoDB有redo log)
架构图(文字版)
┌─────────────────────────────────────┐
│ 客户端(Client) │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 连接层:连接池、权限验证 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 服务层(Server层) │
│ ┌──────────────────────────────┐ │
│ │ 解析器 → 优化器 → 执行器 │ │
│ └──────────────────────────────┘ │
│ binlog、慢查询日志 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 存储引擎层(可插拔) │
│ InnoDB | MyISAM | Memory │
│ redo log、undo log │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 文件系统:数据文件、日志文件 │
└─────────────────────────────────────┘