9

当我尝试登录 phpMyAdmin 时出现以下错误。

用户* * 已经有超过 'max_user_connections' 个活动连接

谁能让我知道如何从 MySQL 服务器端关闭这些数据库连接?

感谢您的时间!

4

5 回答 5

7

阅读max_connections文档来解决您的问题

如果客户端在尝试连接到 mysqld 服务器时遇到 Too many connections 错误,则所有可用连接都被其他客户端使用。

允许的连接数由 max_connections 系统变量控制。当 MySQL 与 Apache Web 服务器一起使用时,默认值为 151 以提高性能。要支持更多连接,请将 max_connections 设置为更大的值。

首先:检查您当前的数据库 max_connection 变量

SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

然后尝试使用以下运行命令增加 max_connection 参数:

 SET GLOBAL max_connections = 300;

或者在位于 /etc/my.cnf 的 my.cnf 中设置此参数

vi /etc/my.cnf
max_connections = 300

最后:重启mysql服务

于 2012-06-25T06:38:31.553 回答
4

你最好的选择是增加max_connections。对于服务于多个不同 Web 应用程序(原始 php、WordPress、phpBB)的 MySQL 实例,您可能需要至少 60 的值。

发出这个命令,你会发现你有多少全局连接可用:

show global variables like '%connections%'

您可以像这样找出在任何给定时刻正在使用的连接数:

show status like '%connected%'

您可以像这样找出每个连接在做什么:

show full processlist

如果我是你,我会尝试至少 100 个连接的全局值。如果您无权执行此操作,您的服务提供商应该能够帮助您。它需要在my.cnfMySQL 的文件配置中完成。不要把它设置得太高,否则你的 MySQL 服务器进程会吞噬你所有的 RAM。

第二种方法允许您将这些整体连接分配给不同的 MySQL 用户。如果您的每个 Web 应用程序都有不同的 MySQL 用户名,那么这种方法将适合您。这种方法写在这里。https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/

控制这个问题的最终方法更加微妙。您可能正在使用 Apache Web 服务器作为底层技术。您可以减少同时运行的 Apache 任务的数量,以提高吞吐量。那是因为 Apache 将请求排队。如果它有几个任务有效地通过队列,那通常比很多任务更快,因为竞争更少。它还需要更少的 MySQL 连接,这将解决您的直接问题。这在这里解释:Restart Mysql automatically when ubuntu on EC2 micro instance kill it when running out of memory

顺便说一句,像 WordPress 这样的网络应用程序使用持久连接池。也就是说,它们建立与 MySQL 数据库的连接,保持它们打开并重用它们。如果您的应用程序很忙,则每个连接的生命周期应该是几分钟。

于 2015-11-13T15:14:01.137 回答
2

这是由于 mysql 配置中指定的限制,系统变量max_user_connections

解决方案

杀死卡在后端的查询只是我建议的一个解决方案,如果它是一个 SELECT 查询。不会终止更改数据的查询,例如 UPDATE/DELETE/INSERT。

其次,您可以使用该命令mysqladmin processlist检查 mysql 内部发生了什么。

如果锁定导致您的问题,您可以检查您正在使用哪个引擎并将其更改为另一个。IBM关于表锁的 SolidDB文档可能会对您有所帮助。尽管这可能还有另一个原因。(例如,您的查询可能由于未优化的查询而花费了太长时间,或者表大小太大,或者您有一个垃圾邮件数据库)。

于 2018-04-16T02:05:46.160 回答
1

首先,这是一个 hack,但可以工作,尤其是在共享主机上。
有时我们都有坏“邻居”,对吧?

如果您有权访问您的 /etc/,则在您的 my.cnf 中或通过信息模式将限制从 30 增加到 50。

  1. 要忽略访问者可能看到的错误消息,请使用@mysql_connect().
  2. 如果MUC超过30个,使用“ or die()”语句停止查询。
  3. die(header(location: THIS PAGE))用并确保替换“或死”信息mysql_close()

是的,它会导致页面加载延迟。但最好加载而不是白屏死机 - 或者访问者不了解的更糟糕的错误消息。

于 2014-02-09T12:03:37.173 回答
0

看起来查询卡在服务器上。重新启动,一切都会好起来的。如果您使用的是共享主机,请联系您的主机提供商,他们会修复它。我是 namecheap 用户,他们解决了它。

于 2019-08-01T18:34:55.240 回答