【Mysql系列】(一)MySQL语句执行流程(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【Mysql系列】(一)MySQL语句执行流程

首发博客地址

首发博客地址

系列文章地址

参考文章


MySQL 逻辑架构

连接器

连接命令一般是这么写的

mysql -h$ip -P$port -u$user -p

那么

什么是连接器?

MySQL 连接器(MySQL Connector)是用于连接和与 MySQL 数据库进行交互的驱动程序。它提供了与 MySQL 数据库服务器通信的功能,包括建立连接、执行查询、更新数据等。

MySQL 提供了多种连接器,常用的有以下几种:

  1. JDBC 连接器:JDBC(Java Database Connectivity)是 Java 语言的一种标准 API,用于连接和操作各种数据库。MySQL 提供了一个 JDBC 驱动程序,可以通过 JDBC 连接器在 Java 应用程序中连接和操作 MySQL 数据库。
  2. ODBC 连接器:ODBC(Open Database Connectivity)是一种通用的数据库访问接口,可以在不同的编程语言和操作系统中连接和操作多种数据库。MySQL 提供了一个 ODBC 驱动程序,可以通过 ODBC 连接器在支持 ODBC 的应用程序中连接和操作 MySQL 数据库。
  3. .NET 连接器:MySQL 提供了一个专门用于.NET 平台的连接器,可以在.NET 应用程序中连接和操作 MySQL 数据库。它提供了与 ADO.NET 兼容的接口,可以方便地在.NET 开发环境中使用 MySQL 数据库。
  4. Python 连接器:MySQL 提供了一个 Python 连接器,可以在 Python 应用程序中连接和操作 MySQL 数据库。该连接器是通过 Python 的标准数据库 API(Python DB API)实现的。

使用 MySQL 连接器,可以通过配置连接参数(如主机名、端口号、用户名、密码等)来建立与 MySQL 数据库的连接。连接器还提供了执行 SQL 语句、获取查询结果、处理事务等功能,可以方便地进行数据库的操作。

以下是一个使用 JDBC 连接器连接 MySQL 数据库的示例:

import java.sql.*;
public class MySQLExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        try {
            // 加载MySQL JDBC驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 建立与MySQL数据库的连接
            Connection conn = DriverManager.getConnection(url, username, password);
            // 执行SQL查询
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users");
            // 处理查询结果
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("id: " + id + ", name: " + name);
            }
            // 关闭连接
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面的示例中,通过加载 MySQL JDBC 驱动程序,使用 JDBC 连接器建立了与 MySQL 数据库的连接。然后执行了一个查询语句,并处理了查询结果。最后关闭了连接。通过 JDBC 连接器,可以方便地在 Java 应用程序中连接和操作 MySQL 数据库。

连接器连接流程

mysql -h$ip -P$port -u$user -p 是一个连接到 MySQL 服务器的命令,其中 $ip 是要连接的 MySQL 服务器的主机名或 IP 地址,$port 是 MySQL 服务器的端口号,$user 是要连接的用户名,-p 表示需要输入密码。

下面是使用 mysql -h$ip -P$port -u$user -p 命令进行连接的详细流程:

  1. 当我们在终端或命令提示符中输入 mysql -h$ip -P$port -u$user -p 命令后,操作系统会启动一个新的进程来执行该命令。
  2. 操作系统会在系统的可执行程序路径中搜索 mysql 可执行文件,并找到它。
  3. 执行 mysql 可执行文件后,会启动一个 MySQL 客户端程序。这个程序是用 C 或 C++编写的,负责与 MySQL 服务器进行通信。
  4. MySQL 客户端程序会解析命令行参数,并找到 -h$ip 参数指定的主机名或 IP 地址,-P$port 参数指定的端口号,-u$user 参数指定的用户名。
  5. MySQL 客户端程序会尝试与指定的 MySQL 服务器建立网络连接,使用$ip$port 参数指定的主机名(或 IP 地址)和端口号。
  6. 如果网络连接成功建立,MySQL 客户端程序会发送一条连接请求给 MySQL 服务器,请求包括用户名和密码。
  7. MySQL 服务器收到连接请求后,会进行身份验证,检查用户名和密码是否正确。如果验证通过,服务器会返回一个成功的连接响应。
  8. MySQL 客户端程序接收到连接响应后,连接建立成功,此时会提示输入密码。
  9. 我们需要输入与 $user 参数指定的用户名对应的密码,按下回车键确认。
  10. 如果密码正确,MySQL 客户端程序会发送验证密码的请求给 MySQL 服务器。
  11. MySQL 服务器收到密码验证请求后,会进行验证。如果密码验证通过,服务器会返回一个成功的验证响应。
  12. MySQL 客户端程序接收到验证响应后,连接成功建立。此时,我们可以在命令行中输入 SQL 语句,并将其发送给 MySQL 服务器进行执行。
  13. MySQL 服务器接收到 SQL 语句后,会执行相应的操作,比如查询、插入、更新等。
  14. MySQL 服务器执行完 SQL 语句后,会将结果返回给 MySQL 客户端程序。
  15. MySQL 客户端程序接收到结果后,会将结果显示在命令行中供我们查看和处理。
  16. 当我们退出 MySQL 客户端程序或输入 quit 命令关闭连接时,MySQL 客户端程序会发送一个断开连接的请求给 MySQL 服务器,服务器会关闭与客户端的连接。

以上是使用 mysql -h$ip -P$port -u$user -p 命令进行连接的详细流程。通过这个流程,我们可以在终端或命令提示符中连接到指定的 MySQL 服务器,并进行数据库操作。

这里需要注意的有两点:

  1. 不要直接将密码跟在-p 命令后面,不安全
  2. **一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置 **

如何查看连接状态

要查看当前连接到 MySQL 服务器的会话和连接信息,可以使用以下方法:

  1. 通过 MySQL 命令行客户端:在命令行中输入 mysql 命令,连接到 MySQL 服务器。然后使用以下命令查看连接信息:
SHOW PROCESSLIST;
  1. 这个命令将显示当前所有活动的 MySQL 连接和会话的详细信息,包括连接的 ID、主机名、用户、执行的 SQL 语句等。
  2. 通过 MySQL 管理工具:如果使用 MySQL 的管理工具,如 phpMyAdmin、MySQL Workbench 等,可以使用这些工具提供的界面来查看连接信息。通常会有一个“当前连接”或类似的选项,点击即可显示当前连接的详细信息。
  3. 通过查询系统表:可以使用以下 SQL 查询语句查看连接信息:
SELECT * FROM information_schema.processlist;
  1. 这个查询语句将返回一个包含当前连接和会话信息的结果集,包括连接的 ID、主机名、用户、执行的 SQL 语句等。

通过以上方法,您可以方便地查看当前连接到 MySQL 服务器的会话和连接信息。这对于监控和调试数据库连接非常有用。

什么是 MySQL 长连接

MySQL 长连接是指在应用程序与 MySQL 服务器之间保持持久的连接,而不是每次执行操作都建立和断开连接。相对于短连接,长连接可以减少连接和断开的开销,提高性能。

在 MySQL 中,长连接可以通过以下方式实现:

  1. 在应用程序中使用连接池:连接池是一组预先创建的、可重复使用的数据库连接。应用程序从连接池中获取连接,并在使用完毕后将连接返回到连接池中,而不是每次操作都创建和关闭连接。连接池可以在应用程序启动时初始化,并在应用程序关闭时销毁。
  2. 调整 MySQL 服务器的参数:MySQL 服务器有一些参数可以调整来支持长连接。其中一个关键参数是wait_timeout ,它定义了一个连接在空闲一段时间后被服务器关闭的时间。默认情况下,wait_timeout较短,适用于短连接。可以将wait_timeout 设置为较大的值,以支持长连接。

长连接的优点包括:

  • 减少连接和断开的开销:长连接避免了频繁的连接建立和断开,减少了网络开销和服务器负担。
  • 快速响应:使用长连接,应用程序可以更快地执行数据库操作,因为不需要重新建立连接。
  • 资源利用率高:长连接可以重复使用数据库连接,减少了服务器资源的占用。

然而,长连接也有一些注意事项:

  • 连接资源占用:长连接占用了 MySQL 服务器的连接资源,因此需要确保服务器的连接数限制和资源配置合理。
  • 内存泄漏:长时间运行的应用程序可能会导致内存泄漏,因为连接没有及时释放。因此,应该定期检查和清理不再使用的连接。

要使用长连接,请确保应用程序中正确配置连接池,并根据需要调整 MySQL 服务器的参数。这样可以充分利用长连接的优势,提高应用程序的性能和效率。

需要注意的是,「MySQL 默认长连接时间是 8 小时」


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
228 0
|
14天前
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
MySQL执行流程
|
1月前
|
存储 SQL NoSQL
|
3月前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
117 7
|
5月前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
54 2
|
7月前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
7月前
|
存储 SQL 关系型数据库
【MySQL进阶之路 | 基础篇】流程控制
【MySQL进阶之路 | 基础篇】流程控制
|
6月前
|
开发工具
centos8 yum安装mysql8 流程配置
centos8 yum安装mysql8 流程配置
697 0
|
7月前
|
存储 缓存 关系型数据库
MySQL结构流程,看这一篇就够了!
MySQL结构流程,看这一篇就够了!