一般情况下,我们在进行MYSQL整体架构描述的时候分为三层,分别是客户端,服务端,存储引擎,如下图所示:
1、客户端
客户端主要用于向MYSQL的服务端发送SQL语句,我们使用的cli,jdbc,可视化工具都可以称之为客户端
2、服务端
MYSQL的服务端主要是对外提供MYSQL的服务,主要包含四个组件:连接器,分析器,优化器,执行器
连接器
在MYSQL中,支持多种通信协议,主要有以下分类:
(1)TCP/IP协议,任何编程语言在进行数据库连接的时候基本都是通过TCP协议连接到MYSQL服务器。
(2)Unix Socket协议,在Linux服务器上,进行数据库连接的时候需要理解一个物理文件,mysql.sock
在MYSQL中,主要使用半双工的通信方式,半双工意味着要么是客户端向服务端发送数据,要么是服务端向客户端发送数据,这两个动作不能同时发生,在进行数据传输的过程中,数据不能分成小块发送,只能一次性发送,如果发送给服务器的数据包过大,我们需要调整MYSQL Server的max_allowed_packet参数,默认值为4M
在MYSQL中,既支持短连接,也支持长连接,短连接就是每次操作完成之后都会进行关闭,长连接可以保持打开,方便后续的程序进行使用,对于长时间不用的连接,MYSQL服务器会自动断开:wait_timeout和interactive_timeout都用来控制连接在空闲状态下被服务器关闭之前等待的时间,wait_timeout表示非交互式连接,比如JDBC程序,interactive_timeout表示交互式连接,比如mysql的命令行。
在mysql中可以通过show processlist命令来查看mysql的连接,mysql的连接状态如下所示:
分析器
分析器主要用来进行词法分析和语法分析操作,将一条SQL语句转化为MYSQL可以执行的抽象语法树
词法分析是指将输入的SQL字符串分割成一系列的词法单元,称之为token
语法分析是指将词法分析产生的词法单元进行一些语法检查,并转换成一棵抽象语法树。
优化器
优化器主要用于根据抽象语法树生成不同的执行计划,然后选择一种最优的执行计划进行执行,现在的MYSQL选择的是基于成本的优化,哪种执行计划开销最小,就用哪种。
执行器
执行器主要用于根据优化器提供的执行计划来操作数据,并返回结果给客户端。在此过程中,执行器会调用执行引擎的API来执行数据操作并且验证用户是否具有权限执行该SQL语句,在执行完成之后将查询到的结果返回给客户端。
发表评论