深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖

MySQL 架构详解

MySQL 的架构自顶向下大致可以分为四个主要层次:

1. 网络连接层

网络连接层负责处理客户端与MySQL服务器之间的通信:

  • 连接管理:处理客户端连接请求,包括身份验证
  • 线程管理:使用线程池技术处理并发连接
  • 协议支持:支持多种连接协议(TCP/IP、Unix socket等)
  • 连接缓存:维护连接状态信息

2. 服务层

服务层是MySQL的核心处理层:

  • SQL接口:接收SQL语句,提供DDL、DML、存储过程等接口
  • 解析器:进行词法分析和语法分析,生成解析树
  • 查询优化器:对SQL进行优化,选择最优执行计划
  • 缓存管理:管理查询缓存

3. 存储引擎层

存储引擎层负责数据的存储和提取:

  • InnoDB:支持事务、行级锁、外键,是MySQL 5.5后的默认引擎
  • MyISAM:不支持事务,但查询性能高
  • Memory:数据存储在内存中,速度快但服务重启后数据丢失

主流存储引擎比较

特性InnoDBMyISAM
默认版本MySQL 5.5后MySQL 5.5前
事务支持支持不支持
锁级别行级锁表级锁
外键支持支持不支持

4. 系统文件层

系统文件层负责将数据持久化到物理存储设备:

  • 数据文件:.ibd文件(InnoDB)、.myd文件(MyISAM)
  • 日志文件:redo log、undo log、binlog
  • 配置文件:my.cnf/my.ini

日志文件

  1. 错误日志:记录MySQL服务启动、运行或停止时的错误信息
  2. 通用查询日志:记录所有到达MySQL服务器的SQL语句
  3. 二进制日志:记录所有更改数据的SQL语句,用于主从复制和数据恢复
  4. 慢查询日志:记录执行时间超过阈值的SQL语句

服务层 - 六大关键组件

连接池 (Connection Pool)

  • 管理所有客户端与数据库的连接资源
  • 采用线程池技术,支持连接复用

SQL接口

  • 支持的命令类型:DML、DDL、存储过程、视图操作

解析器 (Parser)

  • 词法分析将SQL语句分解为tokens
  • 语法分析构建解析树
  • 语义检查验证表/列是否存在

查询优化器 (Optimizer)

  • 基于成本的优化(CBO)
  • 索引选择优化
  • 子查询优化

缓存 (Cache & Buffer)

  • 查询缓存、表缓存、记录缓存、权限缓存
  • 注意:MySQL 8.0已移除查询缓存功能