MySQL体系架构 - 简洁版

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采用分层架构:

  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                │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   文件系统:数据文件、日志文件        │
└─────────────────────────────────────┘
相关推荐
tyatyatya5 分钟前
MySQL Group Replication(MGR)集群部署,实现自动故障切换
数据库·mysql
b***59435 分钟前
mysql 迁移达梦数据库出现的 sql 语法问题 以及迁移方案
数据库·sql·mysql
木风小助理5 分钟前
MySQL中COUNT()、COUNT(1)与COUNT
数据库
不想上班的小吕6 分钟前
采购申请创建(BAPI_PR_CREATE/BAPI_REQUISITION_CREATE)
java·服务器·数据库
j***89467 分钟前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
oioihoii8 分钟前
现代软件开发中常用架构的系统梳理与实践指南
架构
emma羊羊8 分钟前
Vulhub-Mysql靶场
数据库·mysql
橘橙黄又青14 分钟前
mongodb的基本命令
数据库·mongodb
AC赳赳老秦17 分钟前
量化交易脚本开发:DeepSeek生成技术指标计算与信号触发代码
数据库·elasticsearch·信息可视化·流程图·数据库架构·memcached·deepseek
Elastic 中国社区官方博客18 分钟前
使用 Elastic Agent Builder 和 MCP 实现 Agentic 参考架构
大数据·人工智能·elasticsearch·搜索引擎·ai·架构·全文检索