MYSQL:连接管理

Posted 敲代码的Messi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL:连接管理相关的知识,希望对你有一定的参考价值。

连接管理

ps:节选自小林。

连接使用协议

TCP。

权限管理

在客户端成功登录后,会读取用户的权限,并且暂时保存(直至断开连接)。在连接保持期间,如果有管理员修改了当前用户的权限,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。

最大连接时长

mysql 定义了空闲连接的最大空闲时长,由 wait_timeout 参数控制的,默认值是 8 小时(28880秒),如果空闲连接超过了这个时间,连接器就会自动将它断开。
mysql> show variables like ‘wait_timeout’;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| wait_timeout | 28800 |
±--------------±------+
1 row in set (0.00 sec)

主动断开连接

当然,我们自己也可以手动断开空闲的连接,使用的是 kill connection + id 的命令。

mysql> kill connection +6;
Query OK, 0 rows affected (0.00 sec)

一个处于空闲状态的连接被服务端主动断开后,这个客户端并不会马上知道,等到客户端在发起下一个请求的时候,才会收到这样的报错“ERROR 2013 (HY000): Lost connection to MySQL server during query”。

服务器的最大连接数

MySQL 服务支持的最大连接数由 max_connections 参数控制,比如我的 MySQL 服务默认是 151 个,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。
mysql> show variables like ‘max_connections’;
±----------------±------+
| Variable_name | Value |
±----------------±------+
| max_connections | 151 |
±----------------±------+
1 row in set (0.00 sec)

连接类型:长连接/短连接

MySQL 的连接也跟 HTTP 一样,有短连接和长连接的概念,它们的区别如下:
// 短连接
连接 mysql 服务(TCP 三次握手)
执行sql
断开 mysql 服务(TCP 四次挥手)

// 长连接
连接 mysql 服务(TCP 三次握手)
执行sql
执行sql
执行sql

断开 mysql 服务(TCP 四次挥手)
长连接的优缺

  1. 优点
    使用长连接的好处就是可以减少建立连接和断开连接的过程,所以一般是推荐使用长连接。
  2. 缺点
    使用长连接后可能会占用内存增多,因为 MySQL 在执行查询过程中临时使用内存管理连接对象,这些连接对象资源只有在连接断开时才会释放。如果长连接累计很多,将导致 MySQL 服务占用内存太大,有可能会被系统强制杀掉,这样会发生 MySQL 服务异常重启的现象。

解决长连接占用内存问题

有两种解决方式。

  1. 定期断开长连接。
    既然断开连接后就会释放连接占用的内存资源,那么我们可以定期断开长连接。
  2. 客户端主动重置连接。(推荐!!!)
    MySQL 5.7 版本实现了 mysql_reset_connection() 函数的接口,注意这是接口函数不是命令,那么当客户端执行了一个很大的操作后,在代码里调用 mysql_reset_connection 函数来重置连接,达到释放内存的效果。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

PS: 节选自小林

以上是关于MYSQL:连接管理的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL:连接管理

MYSQL:连接管理

MYSQL:连接管理

MySQL数据库

如何正确管理 MySQL 连接?

mysql如何才能远程控制