1. 架构方式
上图中除了客户端外,可以看出 MySQL 的架构,主要分为两大部分:
- Server 层包括连接器、查询缓存、分析器、优化器、执行器等等。基本上它包括了 MySQL 绝大多数的核心服务功能,以及所有的内置函数(例如日期、时间、数学、加密函数),同时例题存储过程、触发器、视图等跨存储引擎的功能都是在这一层实现的。
- 存储引擎,主要负责的就是数据的存储和提取,并且它采用的是可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储应勤。现在最常用的存储引擎是 InnoDB,并且它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。
小结下:
- MySQL 的基本架构分为 Server 层和存储引擎两部分
- 从 MySQL 5.5.5 版本开始 InnoDB 就被当做默认存储引擎了
2. 连接器
从上述架构图也可以看出来,连接器作为客户端和 server 层的入口,它的主要作用就是处理身份认证和权限的管理,当用户登录数据库,连接器会对用户名和密码进行校验,即进行身份认证,如果校验同构,则会查询用户的所有权限,之后在此次连接中的所以需要校权的行为,都会依据此次查询出的权限列表,而在管理员修改了某个用户的权限后,并没有将用户踢下线的操作,也就是说,只要这个连接一直不断开,用户上一次的权限列表会一直生效。
wait_timeout 控制因客户端无操作的自动断开时间,默认值是 8 小时
3. 查询缓存(8.0 已废弃)
查询缓存的思路和我们使用 Redis 等是一样的,它被用来缓存 SELECT 查询语句,如果命中缓存,则会直接返回,如果没有命中,则继续执行正常流程,再把查询到的结果按照 key 是查询语句的 hash 值,value 是查询结果的格式存储。
但是比较致命的是,只要有对一个表进行更新,这个表上的所有查询缓存都会被清空,也就是说,只要一张表被频繁的更新,就会导致缓存几乎不会被命中,所以 MySQL 8.0 已经完全废弃了这个功能。4. 分析器
当跳过查询缓存后,就会进入分析器,分析器就是对一条 SQL 语句进行词法和语法的分析。
词法分析:先提取关键字,例如 select/update/insert/delete 接着提取出查询的表、字段名、查询条件等。
- 语法分析:词法分析后,去检查 SQL 语句是否正确,是否符合 MySQL 语法。
5. 优化器
优化器是真正执行前的重要一步,顾名思义,它会按照最优的执行方案去执行 SQL,例如多个索引的条件下,走哪条索引,多表查询时各个表的连接顺序。
但是究竟它是如何走的,是否就是最优,这里暂时先不提,我们继续向下看。
6. 执行器
在执行器中,开始真正的执行 SQL,大致能分为 3 步,权限校验、选择引擎,调用引擎接口。
如果用户没有对应权限,就会报错。