MySQL 架构
MySQL的体系架构图,如下:
从上面的 MySQL 架构图来看,我们可以了解到 MySQL 的架构自上向下大致可以分为网络连接层、数据库服务层、存储引擎层和系统文件层四大部分
网络连接层
网络连接层负责处理客户端连接请求、身份认证和安全验证。提供了与 MySQL 服务器建立连接的能力,支持很多主流的语言,例如:Java、Python ... ,各语言都是通过各自的 API 接口与 MySQL 建立连接并操作
数据库服务层
数据库服务层负责 SQL 语句的解析、优化、执行和结果返回
-
SQL接口组件
- 接收 SQL 请求
- 返回查询结果
-
解析器(Parser)
- 词法分析:将 SQL 语句分解为标记
- 语法分析:检查 SQL 语法正确性
- 生成解析树
-
优化器(Optimizer)
- 基于成本的优化器(CBO)
- 查询重写
- 执行计划生成(EXPLAIN可查看)
- 索引选择
- 连接顺序优化
-
查询执行引擎
- 执行优化器生成的计划
- 与存储引擎交互获取数据
-
缓存管理(MySQL 8.0前)
- 查询缓存
- 结果集缓存
-
内置函数与存储过程
- 数学函数
- 字符串函数
- 日期函数
- 存储过程/函数执行引擎
存储引擎层
存储引擎层负责数据的存储和提取,是MySQL的"插件式"架构核心
-
InnoDB(默认引擎)
- 支持ACID事务
- 行级锁定
- 外键约束
- MVCC(多版本并发控制)
- 聚簇索引
- 崩溃恢复能力
-
MyISAM
- 表级锁定
- 全文索引
- 较高的读取性能
- 不支持事务
-
Memory
- 内存表
- 哈希索引
- 临时表实现
-
其他引擎
- Archive:高压缩比归档存储
- CSV:CSV格式存储
- NDB:集群引擎
- Federated:远程表访问
系统文件层
系统文件层数据持久化存储,日志记录和系统维护
-
数据文件
-
InnoDB:
- .ibd文件(每表单独表空间)
- ibdata1(系统表空间)
-
MyISAM:
- .MYD(数据文件)
- .MYI(索引文件)
- .frm(表结构定义,8.0后移除)
-
-
日志文件
-
重做日志(redo log):
- ib_logfile0, ib_logfile1
- 保证事务持久性
- 循环写入
-
二进制日志(binlog):
-
mysql-bin.000001等
-
用于复制和时间点恢复
-
三种格式:STATEMENT/ROW/MIXED
-
undo日志:
-
存储在系统表空间或独立undo表空间
-
实现事务回滚和MVCC
-
错误日志:记录启动、运行、停止时的错误信息
-
慢查询日志:记录执行时间超过阈值的查询
-
通用查询日志:记录所有收到的查询
-
-
-
配置文件
- my.cnf(Linux)或 my.ini(Windows)
- 包含服务器参数配置
-
其他文件
- 进程ID文件(.pid)
- socket文件(Linux环境)
- 临时文件(排序、分组等操作使用)