MySQL基础架构

MySQL大致可以分为客户端层、Server层和存储引擎两层。

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDBMyISAMMemory 等多个存储引擎。现在最常用的存储引擎是InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

不同的存储引擎,是共用同一个Server层的。

组件关系图如下:

客户端层

用户访问MySQL的接口。在客户端,用户可以输入SQL语句,通过SQL语句,实现对数据库的访问、操作和控制。

MySQL Server 层

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

注意点:

  1. 连接器在用户登录时读取用户权限并用于后续判断,所以管理员修改密码对已登录用户无效(除非该用户重新登录)
  2. 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时

查询缓存

把查询到的结果缓存并返回(KV结构,Keyselect语句的hash值,Value:查询结果)。

MySQL缓存机制有个弊端,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。如此一来,对于更新频繁的表来说,缓存命中率会非常低!MySQL 8.0 版本直接将查询缓存的整块功能移除了。

分析器

对一条SQL进行词法分析、语法分析。也就是准确识别select/update/insert/delete、表名、字段名以及各种条件,并对SQL的语法进行校验。

优化器

优化器会对执行的SQL进行优化,主要有:

  1. 表里面有多个索引的时候,决定使用哪个索引

  2. 在一个语句有多表关联(join)的时候,决定各个表的连接顺序

执行器

执行器负责调用存储引擎,返回结果,主要有以下几个步骤

  1. 权限校验(连接器阶段已经读取权限,这里只要校验当前用户是否拥有操作这张表的权限)
  2. 选择引擎
  3. 调用引擎提供的接口

存储引擎层

存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDBMyISAMMemory 等多个存储引擎。现在最常用的存储引擎是InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。