MySQL核心架构分三层:连接层负责“进门”(建连、认证、会话管理),服务层是“大脑”(解析、优化、执行SQL并写binlog),存储引擎层真正“存取数据”(如InnoDB通过redo/undo log、聚簇索引等实现ACID)。

MySQL 核心架构要分三层讲清楚:连接层、服务层、存储引擎层。每层各司其职,不是堆砌名词,而是说清“谁在什么时候干了什么”。
连接层:管“进门”和“身份”
这是客户端(比如 Java 应用)跟 MySQL 打交道的第一关。它不处理 SQL 逻辑,只做三件事:
- 建立并维护连接:每个连接对应一个线程,连接池复用连接避免频繁开销
- 校验身份:检查用户名、密码、IP 白名单,决定你有没有权限连进来
- 管理会话状态:比如 autocommit 设置、时区、字符集等会话级变量
服务层:MySQL 的“大脑”
所有 SQL 的解析、决策、调度都在这里完成,关键模块有:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 解析器:把 SQL 拆成 token(如 SELECT、WHERE),再生成语法树,检查是否合法
- 预处理器:确认表名、字段名是否存在,当前用户是否有查询权限
- 优化器:核心中的核心。它基于统计信息和索引情况,选成本最低的执行路径——比如该走哪个索引、多表 join 先查哪张表。EXPLAIN 输出的就是它的决策结果
- 执行器:不直接操作数据,而是调用引擎层接口。它负责权限二次校验、控制事务边界(begin/commit)、处理结果集返回
- Binlog:属于服务层的日志,记录逻辑变更(如“把 id=1 的 name 改成张三”),用于主从复制和恢复
存储引擎层:真正“存和取”的地方
MySQL 用插件式设计,不同引擎可按表指定。面试重点是 InnoDB:
- InnoDB 是默认引擎,支持事务、行级锁、外键、MVCC;靠 redo log(崩溃恢复)、undo log(回滚+快照读)保障 ACID
- 数据组织用聚簇索引:主键 B+ 树叶子节点直接存整行数据;二级索引叶子节点存主键值,查数据要回表
- 对比 MyISAM:它不支持事务、只有表锁、索引与数据分离(非聚簇)、COUNT(*) 快但不可靠,现在基本只用于归档或只读报表场景
补充一个典型流程(比如执行一条 UPDATE)
能串起三层,体现理解深度:
- 连接层分配线程,验证账号密码
- 服务层解析 SQL,优化器确认走哪个索引,执行器调用 InnoDB 接口
- InnoDB 先写 undo log(为回滚和 MVCC 准备),再在 Buffer Pool 中修改数据页,接着写 redo log(Prepare 状态),等服务层写完 binlog 后,再把 redo log 刷成 Commit 状态——这就是两阶段提交,保证主从一致和崩溃可恢复

















