关于mysql:MySQL-连接数过多的处理方法合集-ERROR-1040-Too-many-connections-卡拉云

6次阅读

共计 3315 个字符,预计需要花费 9 分钟才能阅读完成。

本文首发:MySQL 连接数过多的解决办法合集 – Too many connections – 卡拉云

碰到 Can not connect to MySQL server. Too many connections”-mysql 谬误着实令人抓狂。这根本等于失去了对 MySQL 的控制权。本教程将具体解说多种解决此谬误的办法。

sudo mysql -uroot -p
ERROR 1040 (00000): Too many connections

本教程将分这几个来解说此类谬误的起因。

  • 如何查看 MySQL 连贯状态?
  • 如何查看以后 MySQL 连接池是否已满?
  • 限度超时工夫的办法,缩短 sleep 工夫,使零碎更快回收连贯。
  • 批改配置文件中最大连接数的办法,保障连贯畅通。
  • 前线救济法,不必重启,不必登录 MySQL,即可批改最大连接数。
  • 提前布局,给 root 预留好连贯通道。

一. 谬误起因

呈现 MySQL 连接数过多有多种状况,少数是因为 mysql_connect,没有 mysql_close; 当sleep 连贯占满最大连接数 max_connections 时,会导致 Too many connections 谬误。

MySQL 默认最大连接数 max_connections 为 151,其实 MySQL 还给 root 留了多一个通道,真正的最大连接数为max_connections + 1。但理论工作中因为各种起因,这个 1 也有可能被占用。这时,咱们无奈通过登录 MySQL 调整参数的办法来解决这个谬误。

二. 查看以后 MySQL 连贯状况

咱们能够应用 SHOW PROCESSLIST; 查看前 100 条连贯。

SHOW PROCESSLIST;

也能够应用 SHOW full PROCESSLIST; 查看所有连贯。

SHOW full PROCESSLIST;

上图中 ID 15 的连贯 咱们能够看到它曾经 11388s

扩大浏览:《如何应用 MySQL 慢查问日志进行性能优化》

三. 如何查看以后 MySQL 连接池是否已满?

应用 mysqladmin -u kalacloud -p status 查看以后连接数状况

将 kalacloud 替换为你的 MySQL 账号名称,在返回的后果中,Threads 的值为以后连接数,如果以后连接数靠近或等于最大连接数,那么就阐明 MySQL 连接数曾经满了或靠近满了。

扩大浏览:《MySQL 触发器的创立、应用、查看、删除教程及利用场景实战案例》

四. 正当设置超时工夫

之所以会呈现大量 sleep 占满连贯,除了业务量的起因外,也有能够从超时工夫着手调整,可依据理论状况适当缩短超时工夫,让 MySQL 可在短时间主动清理超时连贯,以达到保障连贯通常的目标。

mysqld 连贯超时参数有以下两个:

  • interactive_timeout
  • wait_timeout

默认状况下,两者都是 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 配置文件详解》

2. 长期变更连贯超时工夫(无需重启):

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

留神:

  • 这是长期变更配置的办法,在重启 MySQL 后会复原配置文件中的设置值。
  • 对于曾经关上的连贯,是不会被敞开的。只有新建设的连贯才会在 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
  • data/kalacloud.pid:将这里批改为你服务器中 pid 的文件门路及文件名。

此办法仅实用于非凡、紧急情况,在生产环境应用,有肯定危险,慎用。

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

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

  • max_connections:管制最大连接数。
  • max_user_connections:管制单个用户的最大连接数。当此参数为 100 时,那么任意用户(含 root 用户)最多可创立 100 个连贯。

制订连贯策略:

max_connections = 2000
max_user_connections= 300

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

六. 总结

无关 MySQL 连接数过多的谬误,咱们要在平时的工作中多实际,这里的很多要害参数都须要咱们对手中的工作有更宏观的意识,能力更好的设定这些参数。

最初举荐以下卡拉云,卡拉云是一套低代码开发工具,可一键接入包含 MySQL 在内的常见数据库及 API,无需懂任何前端,只须要简略拖拽,即可疾速搭建企业外部工具。数月的开发工作量,应用卡拉云后可缩减至数天,收费试用卡拉云。

卡拉云可一键接入市面上常见的数据库及 API

无关 MySQL 教程,可持续拓展学习:

  • MySQL 工夫戳用什么类型 – MySQL 工夫函数详解
  • MySQL 中如何实现 BLOB 数据类型的存取,BLOB 有哪些利用场景?
  • 如何在 MySQL / MariaDB 中跳过多张表导出或指定多张表导出备份
  • 如何将 MySQL / MariaDB 的查问后果保留到文件
  • MySQL 触发器应用教程 – 创立、删除、查看
正文完
 0