MySQL服务器是如何处理客户端请求的?
当我们在学习MySQL时,通常是由客户端发起请求,向服务端查询数据并返回,但内部发生了什么其实我们并不知晓,今天我们就来剖析其内部结构。
一、MySQL执行流程是怎样的?
从图中我们可以看出,服务器在处理来自客户端的查询请求大致需要经过三个部分,分别是连接管理 、 解析与优化 、 存储引擎 ,也就是我们常说的连接层、服务层、引擎层,接下来我们来详细每一层结构的具体内容。
1、连接层
客户端在向 MySQL 服务器发送一条查询请求前,首先要确保MySQL服务器已经正常启动,并且客户端需要与MySQL服务器已经建立 TCP 连接。 在客户端程序发起连接请求时,要携带主机地址、用户名、密码、端口号等信息,服务器程序会对客户端程序提供的这些信息做身份认证、权限获取。
- 用户名或密码不对,会收到一个
Access denied for user
错误,客户端程序结束执行 - 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限。所以,如果一个用户已经建立了连接,即使管理员中途修改了该用户的权限,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。
每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出和服务器断开连接时,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把