我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

前言

如果仅在使用MySQL时写SQL语句,则应查看“ MySQL优化的基础逻辑”。如果您仅了解SQL的优化方式,则应使用本文来了解MySQL的体系结构和SQL语句的执行过程。

建筑学

让我们首先看一下MySQL的架构。下图是在MySQL官方网站上挖出的,因此具有很高的权威和准确性。

mysql 执行命令_命令执行绕过_命令执行漏洞

通过这张图片,我们可以直观地看到MySQL的内部结构,包括连接器,卡车,解析器,优化器,存储引擎和SQL接口,这些接口支持DDL,DML,存储的过程,视图和其他功能。接下来,通过执行SQL语句,我们将深入了解MySQL的每个组件的功能和功能。

SQL语句的执行过程1。连接到MySQL

通常,我们会编写SQL语句通过某个客户端执行并接受执行结果,例如命令行,JDBC和。但是,在执行之前,您必须首先成功建立与MySQL服务的连接。这是“连接器”的工作。

在这里,MySQL服务通过命令行连接,命令如下:

mysql -h127.0.0.1 -uroot -p

该命令连接到本地MySQL服务。输入密码后,连接器将验证用户和密码。如果验证失败,客户将响应拒绝访问的信息。

验证成功后,连接器将成功建立与客户端的连接并阅读用户的权限。用户的后续操作将根据权限控制。

那么,存储的用户名,密码和权限在哪里?

在MySQL中,除了开发人员创建的业务库外,还有一些系统库可以支持其自己的操作,包括MySQL,SYS和用户信息,并存储在MySQL库中。

命令执行绕过_mysql 执行命令_命令执行漏洞

当然,与MySQL的连接数量也有限制,可以通过参数控制。

MySQL [mysql]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1215  |
+-----------------+-------+

您还可以通过Show查看当前连接的客户端。

MySQL [mysql]> show processlist;
+------+------+-----------------+-------+---------+------+----------+------------------+
| Id   | User | Host            | db    | Command | Time | State    | Info             |
+------+------+-----------------+-------+---------+------+----------+------------------+
| 1156 | root | 127.0.0.1:61223 | mysql | Query   |    0 | starting | show processlist |
+------+------+-----------------+-------+---------+------+----------+------------------+

2。查询缓存

成功建立连接后,客户端可以将SQL语句发送到MySQL服务。就像我们写的那样,“ SQL接口”将收到SQL语句。如果是声明,它将在“缓存”中搜索结果并响应客户端。

一些博客说,缓存是在解析后查询的,这并不严格。这是官方描述:“如果收到相同的语句,服务器将从查询缓存中检索结果,而不是再次解析和执行该语句。”

命令执行漏洞_mysql 执行命令_命令执行绕过

同时,您可以看到此评论“自MySQL 5.7.20以来,查询缓存已被弃用,并已在MySQL 8.0中删除。”根据官方声明:“缓存仅适用于表数据不经常变化的情况。如果表数据经常更新(很明显它们在这种情况下是大多数),则缓存的命中率很低,并且缓存频繁维护的频繁维护有时会导致比解决的问题更多,并且缓存功能将是无用的。”

3。分析SQL语句

缓存后,“解析器”开始工作。解析器的目的是检查SQL语句是否正确,并将SQL语句解析为MySQL可以理解的结构,即SQL语法树。

类似ID的SQL语句将在解析过程中报告错误,因为该关键字未识别(对列名称和表名称的检查和验证在预处理阶段中)。

命令执行绕过_mysql 执行命令_命令执行漏洞

以及类似ID的SQL语句将被解析为以下图:

命令执行漏洞_命令执行绕过_mysql 执行命令

如果您想了解特定的分析过程,请参阅此博客

4。优化SQL语句

通过解析器生成SQL语法树后,我们到达了“优化器”阶段。在此阶段,如何执行SQL,不使用索引以及使用哪个索引。它是用“ MySQL优化的基本逻辑”写的,因此我不会在这里详细说明。

5。执行SQL语句

传递“优化器”后,最终生成了最佳执行计划,并将其移交给“执行者”进行执行。执行人通过调用“存储引擎”接口获得数据。执行人与存储引擎之间的相互作用将在此处进行详细说明。

总结

在这一点上,查询语句的执行过程变得非常清晰,它也了解MySQL的整个体系结构以及各个组件的作用。最后,使用图片结束本文的核心内容并总结它。

命令执行绕过_mysql 执行命令_命令执行漏洞

查询SQL语句的执行过程:

客户端通过连接器连接到MySQL服务。连接成功后,将SQL语句请求发送到SQL接口。当SQL接口接收SQL查询语句时,它将首先缓存查询。如果将命中率返回给客户,否则将移交给解析器。获得SQL语句后,解析器将确定语法是否正确。它将生成SQL语法树并将其交给优化器。否则,将向客户端报告错误。优化器将基于SQL语法树生成一个最佳执行计划,并将其交给执行程序以进行执行。执行人获得执行计划并调用存储引擎以获取对客户端的数据响应。结束!呢呢

二维码
扫一扫在手机端查看

本文链接:https://by928.com/8698.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线