mysql架构图

mysql架构

  1. 连接层(连机器): 管理连接和验证
  2. 服务层(分析器,优化器、执行器): 查询解析、分析、优化、缓存、以及所有的内置函数。
  3. 分析器: 词法分析、语法分析
  4. 优化器: 执行计划生成、索引选择
  5. 执行器,操作引擎,返回结果
  6. 引擎层(存储引擎):存储存储引擎真正的负责了MySQL中数据的存储和提取
  7. 数据存储层:数据存储在文件系统中,并完成与存储引擎的交互

mysql如何执行一条语句

查询语句执行

更新语句执行

::mysql架构


客户端请求 --->
连接器(验证用户身份,给予权限) --->
查询缓存(存在缓存则直接返回,不存在则执行后续操作 --->
分析器(对SQL进行词法分析和语法分析操作) --->
优化器(主要对执行的sql优化选择最优的执行方案方法) --->
执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口) --->
去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)

连接层

技巧💡

客户端与mysql服务端建立连接。在完成经典的TCP握手后,连接器就要开始认证你的身份(账号、密码)。验证成功获取,获取权限。

最上层是一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

  1. 连接,如果太久没动静,直至wait_timeout(默认8小时)后自动断开。1
  2. 对于长连接2应该尽量避免,在mysql执行过程中,有些资源会积累未释放。要释放长连接,可以定时释放或者手动重置(3)

服务层:

第二层服务层,主要完成大部分的核心服务功能, 包括查询解析、分析、优化、缓存、以及所有的内置函数,所有跨存储引擎的功能也都在这一层实现,包括触发器、存储过程、视图等

引擎层:

第三层存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取

存储层:

第四层为数据存储层,主要是将数据存储在运行于该设备的文件系统之上,并完成与存储引擎的交互

Footnotes

  1. 8小时会失效,一般java客户端,2种方案,1. 设置连接池的生命周期小于8小时。2. 定期自动续期,2.1 使用时,校测连接有效性 2.2 定期至少sql语句,续期。如执行 select 1

  2. 长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

  3. 重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。