我尝试登录phpMyAdmin时出现以下错误.
User **已经超过'max_user_connections'活动连接
谁能让我知道如何从MySQL服务器端关闭这些数据库连接?
感谢您的时间!
osy*_*yan 10
阅读max_connections文档来解决您的问题
如果客户端在尝试连接到 mysqld 服务器时遇到“连接过多”错误,则所有可用连接都已被其他客户端使用。
允许的连接数由 max_connections 系统变量控制。默认值为 151,以提高 MySQL 与 Apache Web 服务器一起使用时的性能。要支持更多连接,请将 max_connections 设置为更大的值。
首先:检查当前数据库 max_connection 变量
SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
Run Code Online (Sandbox Code Playgroud)
然后尝试通过运行以下命令来增加 max_connection 参数:
SET GLOBAL max_connections = 300;
Run Code Online (Sandbox Code Playgroud)
或者在 my.cnf 中设置此参数,主要位于 /etc/my.cnf
vi /etc/my.cnf
max_connections = 300
Run Code Online (Sandbox Code Playgroud)
最后:重启MySQL服务
仅供参考,
您还可以检查 max_user_connections。然而,它们是这样关联的:
max_connections 设置总连接限制
max_user_connections 设置每个用户的限制
====
正如 Sushilzzz 所问:这可能是 RAM 不足造成的吗?
简短回答:没有
长回答:是的,如果 RAM 大小较低并且 MySQL 无法根据需要快速响应,则会有许多打开的连接,您可以轻松达到最大连接。
每 1GB 内存的最大连接数估计为 100(如果您没有任何其他进程同时使用内存)。我通常对每 1GB RAM 的 max_connection 使用 ~75
RAM max_connection
1GB 70
2GB 150
4GB 300
8GB 500
Run Code Online (Sandbox Code Playgroud)
你最好的选择是增加max_connections
。对于服务多个不同 Web 应用程序(原始 php、WordPress、phpBB)的 MySQL 实例,您可能需要至少 60 的值。
发出此命令,您将了解有多少个可用的全局连接:
show global variables like '%connections%'
Run Code Online (Sandbox Code Playgroud)
您可以了解在任何给定时刻有多少个连接正在使用,如下所示:
show status like '%connected%'
Run Code Online (Sandbox Code Playgroud)
您可以这样了解每个连接正在做什么:
show full processlist
Run Code Online (Sandbox Code Playgroud)
如果我是你,我会尝试设置至少 100 个连接的全局值。如果您无权执行此操作,您的服务提供商应该能够帮助您。需要在my.cnf
MySQL的文件配置中完成。不要将其设置得太高,否则您将面临 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 Mysqlautomaticallywhenubuntu on EC2 microinstancekills it when running out of memory
顺便说一句,像 WordPress 这样的 Web 应用程序使用持久连接池。也就是说,它们建立与 MySQL 数据库的连接,保持它们打开,然后重用它们。如果您的应用程序很忙,则每个连接的生命周期应该是几分钟。
发生这种情况是由于 mysql 配置系统变量 中指定的限制max_user_connections
。
如果它是 SELECT 查询,那么终止卡在后端的查询只是我建议的一个解决方案。更改数据的查询(例如 UPDATE/DELETE/INSERT)不会被终止。
其次,可以使用命令mysqladmin processlist
查看mysql内部发生了什么情况。
如果锁定导致您的问题,您可以检查您正在使用的引擎并将其更改为另一个引擎。IBM关于表锁的 SolidDB 文档可能会对您有所帮助。尽管这可能还有其他原因。(例如,也许您的查询由于未优化的查询而花费了太长的时间,或者表大小太大,或者您的数据库充满了垃圾邮件)。