MySQL(1.1):MySQL 系统架构

3 阅读3分钟

1.1 MySQL 系统架构

理解 MySQL,首先要理清它的宏观定位与结构。很多人混淆了“数据库”和“数据库实例”的概念,在 MySQL 中,这两个词有着严格的物理与逻辑区分。

一、 数据库与实例的本质差异

MySQL 是一个单进程多线程架构的数据库系统。我们需要区分以下两个概念:

  • 数据库 (Database):它是物理上的集合,表现为磁盘上的文件(例如以 .MYD.MYI.ibd 结尾的文件)。这里是数据真正安家落户的地方。
  • 实例 (Instance):它是操作系统中的一个运行进程。由后台线程以及一个共享内存池组成。实例的作用是用来真正操作和管理上述的数据库文件。

关系图景:当你启动 MySQL 时,实际上是启动了一个“实例”(进程),由这个实例去读取和操作物理磁盘上的“数据库”(文件)。

二、 MySQL 基础架构全景

MySQL 的系统架构采用了分层的设计思想,最大的特点就是存储引擎是可插拔的。整个架构大致可分为以下几层组件:

  1. 连接池 (Connection Pool):负责管理与客户端的连接,进行权限认证和连接限制。
  2. 解析器 (Parser):接收 SQL 语句并进行词法和语法分析,生成解析树。
  3. 优化器 (Optimizer):这是重中之重,它负责寻找并决定 SQL 执行的最优方案(例如选择哪个索引)。
  4. 执行器 (Executor):调用底层存储引擎的 API 来完成具体的数据读写操作。
  5. 存储引擎层 (Storage Engine):真正负责数据的存储和提取。

引擎的宿主与组件

维度MySQL 实例 (Instance)InnoDB 存储引擎 (Engine)
本质操作系统中的一个进程数据库的存取技术实现
组成连接池 + 解析器 + 优化器 + 存储引擎缓冲池 + 后台线程 + 事务日志
关系容器(它是引擎的宿主)组件(它是实例的灵魂)
灵活性相对固定可插拔,可以随时换一台

这种“可插拔”的设计意味着,你可以根据表的需求,为不同的表选择不同的存储引擎以达到最佳效果(虽然如今绝大多数场景下 InnoDB 已经是毫无争议的默认选择)。

三、 MyISAM 与 InnoDB 的本质区别

在 MySQL 5.5 版本之前,默认引擎是 MyISAM;但在 5.5 及以后,InnoDB 借由其强大的灾备和并发控制能力,成为了公认的默认选型。理解它们的区别,是理解数据库演进的关键:

特性MyISAMInnoDB核心影响
事务支持❌ 不支持✅ 支持InnoDB 可以保证数据操作的原子性和一致性(ACID)。
锁机制表锁行锁InnoDB 的并发写入能力远超 MyISAM(由于锁颗粒度极小)。
外键支持❌ 不支持✅ 支持只有 InnoDB 能强制维护表间的数据完整性约束。
崩溃恢复❌ 不支持✅ 支持InnoDB 依靠 WAL 及重做日志 (Redo Log) ,在断电重启后能自动从灾难中恢复,不丢数据。
MVCC❌ 不支持✅ 支持InnoDB 支持多版本并发控制,做到“读写不互斥”。
索引结构数据和索引分离索引即数据InnoDB 采用聚簇索引结构,主键查找直接拿到数据。

总结:MyISAM 只适合极少数只要查询、极少修改且不关心数据丢失安全性的场景;而 InnoDB 才是现代企业级常规业务的基础设施。