MySQL体系架构 - 简洁版

27 阅读3分钟

MySQL分为四层架构,从上到下依次是:


1. 连接层(Connection Layer)

作用:处理客户端连接和权限验证

客户端连接 → 连接池 → 权限验证 → 分配线程

关键点

  • 管理连接池
  • 用户认证、权限校验
  • 线程复用

2. 服务层(Service Layer)- Server层

作用:SQL的核心处理层

包含模块

  • 查询缓存:缓存SELECT结果(MySQL 8.0已移除)
  • 解析器:词法分析、语法分析,检查SQL是否合法
  • 优化器:选择最优执行计划(用哪个索引、表连接顺序)
  • 执行器:调用存储引擎接口执行SQL
SQL → 解析器 → 优化器 → 执行器 → 调用引擎

3. 存储引擎层(Storage Engine Layer)

作用:真正负责数据的存储和读取

常见引擎

  • InnoDB:支持事务、行锁、外键(默认引擎)
  • MyISAM:不支持事务,只有表锁
  • Memory:数据存内存,速度快但不持久化
-- 查看引擎
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采用分层架构:

  1. 连接层:管理客户端连接池,做权限认证
  2. 服务层:Server层,是SQL处理的核心
    • 解析器做词法语法分析
    • 优化器选择最优执行计划
    • 执行器调用存储引擎接口
  3. 存储引擎层:可插拔设计,InnoDB是默认引擎,支持事务、行锁、MVCC
  4. 文件系统层:数据最终持久化,包括数据文件、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                │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   文件系统:数据文件、日志文件        │
└─────────────────────────────────────┘