MySQL 原理篇
MySQL 体系结构
MySQL 体系结构图:
MySQL 从概念上分为四层,这四层自顶向下分别是网络连接层,服务层(核心层),存储引擎层,系统文件层。我们自顶向下开始讲解。
网络连接层(Client Connectors)
主要负责连接管理、授权认证、安全等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到 MySQL 服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过 SSL 证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是 MySQL 所特有的技术。
服务层(MySQL SERVER)
第二层服务层是 MySQL 的核心,MySQL 的核心服务层都在这一层,查询解析,SQL 执行计划分析,SQL 执行计划优化,查询缓存。以及跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。
- 连接池(Connection Pool):管理、缓冲用户的连接,线程处理等需要缓存的需求
- 管理服务和工具组件(Services & utilities):系统管理和控制工具,例如备份恢复、MySQL 复制、集群等
- SQL 接口(SQL Interface):接受用户的 SQL 命令,并且返回用户需要查询的结果
- 查询解析器(Parser):SQL 命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)
- 查询优化器(Optimizer):SQL 语句在查询之前会使用查询优化器对查询进行优化
- 缓存(Caches):如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据
存储引擎层(Pluggable Storage Engines)
负责 MySQL 中数据的存储与提取。 服务器中的查询执行引擎通过 API 与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。MySQL 采用插件式的存储引擎。MySQL 为我们提供了许多存储引擎,每种存储引擎有不同的特点。我们可以根据不同的业务特点,选择最适合的存储引擎。如果对于存储引擎的性能不满意,可以通过修改源码来得到自己想要达到的性能。
各个存储引擎的描述参考下文。
特点:
- MySQL 采用插件式的存储引擎。
- 存储引擎是针对于表的而不是针对库的(一个库中不同表可以使用不同的存储引擎),服务器通过 API 与存储引擎进行通信,用来屏蔽不同存储引擎之间的差异。
- 不管表采用什么样的存储引擎,都会在数据区,产生对应的一个 的一个 frm 文件(表结构定义描述文件)
系统文件层(File System NTFS ext4 SAN NAS)
文件系统,数据、日志(redo,undo)、索引、错误日志、查询记录、慢查询等,详细参考下文的物理文件描述。
比如该层将数据库的数据存储在文件系统之上,并完成与存储引擎的交互。在 MySQL 索引机制 中有讲到 Myisam 和 I