本文介绍: 1.问题原因1)客户端程序退出之前没有调用mysql_close()。[写程序的疏忽,或者数据库db类库没有自动关闭每次的连接]2)客户端sleep时间wait_timeoutinteractive_timeout规定的秒内没有发出任何请求服务器。[类似常连,类似于不完整tcp ip协议构造服务端一直认为客户端仍然存在(有可能客户端已经断掉了)]3)客户端程序结束之前向服务器发送请求还没得到返回结果结束掉了。[参看:tcp ip协议的三次握手]2.解决办法

1.问题原因

1)客户端程序退出之前没有调用mysql_close()。[写程序的疏忽,或者数据库db类库没有自动关闭每次的连接]

2)客户sleep时间wait_timeoutinteractive_timeout规定的秒内没有发出任何请求服务器。[类似常连,类似于不完整tcp ip协议构造服务端一直认为客户端仍然存在(有可能客户端已经断掉了)]

3)客户端程序结束之前向服务器发送请求还没得到返回结果结束掉了。[参看:tcp ip协议的三次握手]

2.解决办法

2.1删除过多的sleep连接。

2.2 修改max_connections 的最大连接数

mysqlurootppassword 连接数据库

show variables likemax_connections’  查看最大连接数

SHOW full PROCESSLIST; 查看所有连接。

show status like 'Threads%'; 查看连接总数

四. 合理设置超时时间

之所以会出现大量 sleep 占满连接,除了业务量的原因外,也有可以超时时间着手调整,可根据实际情况适当缩短超时时间,让 MySQL 可在短时间自动清理超时连接,以达到保证连接通常的目的。

mysqld 连接超时参数有以下两个

默认情况下,两者都是 28800 秒(8 小时),我们可以在 MySQL 配置文件修改两个参数

如果你使用的是mysql_pconnect 这种持久连接的话,可以将超时时间降到更合适的值,比如 600 (10 分钟)甚至 60(1 分钟)。这个超时时间并没有一个明确的时间,主要还是要看你的应用场景中的实际需求

1.在配置文件修改超时时间(需重启 MySQL 生效):

首先打开 mysqld.cnf 配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

然后配置文件找到两行,并修改对应参数

[mysqld]
interactive_timeout=60
wait_timeout=60

关于MySQL 配置文件详解,你可以查看卡拉云的另一篇博客MySQL 配置文件 my.cnf / my.ini 逐行详解

2.临时变更连接超时时间(无需重启):

SET GLOBAL interactive_timeout = 60;
SET GLOBAL wait_timeout = 60;

注意

扩展阅读:《如何远程连接 MySQL 数据库,阿里云腾讯云允许远程连接教程

五. 查看及修改最大连接数

在 MySQL 中,默认连接数为 151,我们可以通过修改 MySQL 配置文件永久调整连接数参数,也可以通过 SQL 命令临时调整。

1.查看当前 MySQL 连接数

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.01 sec)

mysql>

2.临时调整当前 MySQL 连接数

set GLOBAL max_connections = 300;

3.通过修改 MySQL 配置文件调整最大连接数

首先打开 MySQL 配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在 [mysqld] 下面找到 max_connections ,如果没有可直接添加

[mysqld]
...

max_connections = 300

...

修改后重启 MySQL,使配置文件生效

sudo systemctl restart mysql

重启后,进入 MySQL ,我们可以看到最大连接数配置已经生效

mysql> show variables like '%max_connections%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 300   |
| mysqlx_max_connections | 100   |
+------------------------+-------+
2 rows in set (0.02 sec)

mysql>

扩展阅读:《MySQL 配置文件 my.cnf / my.ini 逐行详解

六. 无法登录 MySQL 时,如何修改最大连接数

在无法登录又无法重启 MySQL 时,我们可以使用以下方法进行操作,以增大连接数。

1.修改 pid 增大连接数

我们可以使用 gdb 工具,在不进入数据库的情况下,修改最大连接数。

gdb -p $(cat data/kalacloud.pid) 
-ex "set max_connections=5000" -batch

方法仅适用于特殊紧急情况,在生产环境使用,有一定风险慎用

七. 提前布局,防患于未然

在 MySQL 配置文件中,有两个有关连接数的参数

制定连接策略

max_connections = 2000
max_user_connections= 300

当 MySQL 有 6 个用户时(不含 root ),单个用户最大连接数为 300,那么 6 个用户最多有 1800 连接。那么系统总会剩下 200 个连接留给 root 使用

 

原文地址:https://blog.csdn.net/a15804226768/article/details/127886517

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_50268.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注