首发博客地址
MySQL 逻辑架构
连接器
连接命令一般是这么写的
mysql -h$ip -P$port -u$user -p
那么
什么是连接器?
MySQL 连接器(MySQL Connector)是用于连接和与 MySQL 数据库进行交互的驱动程序。它提供了与 MySQL 数据库服务器通信的功能,包括建立连接、执行查询、更新数据等。
MySQL 提供了多种连接器,常用的有以下几种:
- JDBC 连接器:JDBC(Java Database Connectivity)是 Java 语言的一种标准 API,用于连接和操作各种数据库。MySQL 提供了一个 JDBC 驱动程序,可以通过 JDBC 连接器在 Java 应用程序中连接和操作 MySQL 数据库。
- ODBC 连接器:ODBC(Open Database Connectivity)是一种通用的数据库访问接口,可以在不同的编程语言和操作系统中连接和操作多种数据库。MySQL 提供了一个 ODBC 驱动程序,可以通过 ODBC 连接器在支持 ODBC 的应用程序中连接和操作 MySQL 数据库。
- .NET 连接器:MySQL 提供了一个专门用于.NET 平台的连接器,可以在.NET 应用程序中连接和操作 MySQL 数据库。它提供了与 ADO.NET 兼容的接口,可以方便地在.NET 开发环境中使用 MySQL 数据库。
- 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
命令进行连接的详细流程:
- 当我们在终端或命令提示符中输入
mysql -h$ip -P$port -u$user -p
命令后,操作系统会启动一个新的进程来执行该命令。 - 操作系统会在系统的可执行程序路径中搜索
mysql
可执行文件,并找到它。 - 执行
mysql
可执行文件后,会启动一个 MySQL 客户端程序。这个程序是用 C 或 C++编写的,负责与 MySQL 服务器进行通信。 - MySQL 客户端程序会解析命令行参数,并找到
-h$ip
参数指定的主机名或 IP 地址,-P$port
参数指定的端口号,-u$user
参数指定的用户名。 - MySQL 客户端程序会尝试与指定的 MySQL 服务器建立网络连接,使用
$ip
和$port
参数指定的主机名(或 IP 地址)和端口号。 - 如果网络连接成功建立,MySQL 客户端程序会发送一条连接请求给 MySQL 服务器,请求包括用户名和密码。
- MySQL 服务器收到连接请求后,会进行身份验证,检查用户名和密码是否正确。如果验证通过,服务器会返回一个成功的连接响应。
- MySQL 客户端程序接收到连接响应后,连接建立成功,此时会提示输入密码。
- 我们需要输入与
$user
参数指定的用户名对应的密码,按下回车键确认。 - 如果密码正确,MySQL 客户端程序会发送验证密码的请求给 MySQL 服务器。
- MySQL 服务器收到密码验证请求后,会进行验证。如果密码验证通过,服务器会返回一个成功的验证响应。
- MySQL 客户端程序接收到验证响应后,连接成功建立。此时,我们可以在命令行中输入 SQL 语句,并将其发送给 MySQL 服务器进行执行。
- MySQL 服务器接收到 SQL 语句后,会执行相应的操作,比如查询、插入、更新等。
- MySQL 服务器执行完 SQL 语句后,会将结果返回给 MySQL 客户端程序。
- MySQL 客户端程序接收到结果后,会将结果显示在命令行中供我们查看和处理。
- 当我们退出 MySQL 客户端程序或输入
quit
命令关闭连接时,MySQL 客户端程序会发送一个断开连接的请求给 MySQL 服务器,服务器会关闭与客户端的连接。
以上是使用 mysql -h$ip -P$port -u$user -p
命令进行连接的详细流程。通过这个流程,我们可以在终端或命令提示符中连接到指定的 MySQL 服务器,并进行数据库操作。
这里需要注意的有两点:
- 不要直接将密码跟在-p 命令后面,不安全
- **一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置 **
如何查看连接状态
要查看当前连接到 MySQL 服务器的会话和连接信息,可以使用以下方法:
- 通过 MySQL 命令行客户端:在命令行中输入
mysql
命令,连接到 MySQL 服务器。然后使用以下命令查看连接信息:
SHOW PROCESSLIST;
- 这个命令将显示当前所有活动的 MySQL 连接和会话的详细信息,包括连接的 ID、主机名、用户、执行的 SQL 语句等。
- 通过 MySQL 管理工具:如果使用 MySQL 的管理工具,如 phpMyAdmin、MySQL Workbench 等,可以使用这些工具提供的界面来查看连接信息。通常会有一个“当前连接”或类似的选项,点击即可显示当前连接的详细信息。
- 通过查询系统表:可以使用以下 SQL 查询语句查看连接信息:
SELECT * FROM information_schema.processlist;
- 这个查询语句将返回一个包含当前连接和会话信息的结果集,包括连接的 ID、主机名、用户、执行的 SQL 语句等。
通过以上方法,您可以方便地查看当前连接到 MySQL 服务器的会话和连接信息。这对于监控和调试数据库连接非常有用。
什么是 MySQL 长连接
MySQL 长连接是指在应用程序与 MySQL 服务器之间保持持久的连接,而不是每次执行操作都建立和断开连接。相对于短连接,长连接可以减少连接和断开的开销,提高性能。
在 MySQL 中,长连接可以通过以下方式实现:
- 在应用程序中使用连接池:连接池是一组预先创建的、可重复使用的数据库连接。应用程序从连接池中获取连接,并在使用完毕后将连接返回到连接池中,而不是每次操作都创建和关闭连接。连接池可以在应用程序启动时初始化,并在应用程序关闭时销毁。
- 调整 MySQL 服务器的参数:MySQL 服务器有一些参数可以调整来支持长连接。其中一个关键参数是
wait_timeout
,它定义了一个连接在空闲一段时间后被服务器关闭的时间。默认情况下,wait_timeout
较短,适用于短连接。可以将wait_timeout
设置为较大的值,以支持长连接。
长连接的优点包括:
- 减少连接和断开的开销:长连接避免了频繁的连接建立和断开,减少了网络开销和服务器负担。
- 快速响应:使用长连接,应用程序可以更快地执行数据库操作,因为不需要重新建立连接。
- 资源利用率高:长连接可以重复使用数据库连接,减少了服务器资源的占用。
然而,长连接也有一些注意事项:
- 连接资源占用:长连接占用了 MySQL 服务器的连接资源,因此需要确保服务器的连接数限制和资源配置合理。
- 内存泄漏:长时间运行的应用程序可能会导致内存泄漏,因为连接没有及时释放。因此,应该定期检查和清理不再使用的连接。
要使用长连接,请确保应用程序中正确配置连接池,并根据需要调整 MySQL 服务器的参数。这样可以充分利用长连接的优势,提高应用程序的性能和效率。
需要注意的是,「MySQL 默认长连接时间是 8 小时」