使用PHP或.htaccess设置max_connections?

时间:2018-12-07 16:09:03

标签: php sql

我第一次遇到max_user_connections错误:

Warning: mysqli_connect(): (42000/1226): User 'xxx' has exceeded the 'max_user_connections' resource (current value: 30)

我知道许多线程与此错误相关,但是它们要么太旧以至于我无法答复,要么解决方案缺少我的案例的详细信息。 我根据不同的答案进行了这种尝试,但并没有改变任何事情:

$connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) 
or die("Error");
$set_max = mysqli_query($connexion, "set global max_connections = 2000");

此错误是什么意思? 30个访问者正在浏览该网站,或者同时存在30个以上的SQL请求(不应该这样)? 最好增加最大数量? PHP或.htaccess文件?

多谢。

4 个答案:

答案 0 :(得分:3)

您不能在PHP或Web服务器级别更改此限制。这是数据库服务器中的一项设置,如果需要,您必须在其中进行设置。

原因将取决于您的代码和收到的流量。如果您的代码为每个查询打开一个新连接(而不是在一个请求中为所有查询重新使用连接),那么一页上的31个查询将使您超出限制。

高流量也可能导致它,特别是如果您的PHP脚本需要很长时间才能运行。

答案 1 :(得分:1)

您可以使用MySQL语句为特定用户增加它:

GRANT USAGE ON *.* TO 'user_name'@'user_host' WITH MAX_USER_CONNECTIONS 50;

您还可以将此行添加到配置文件my.cnf

max_user_connections=50

但是,这将为所有个用户设置限制。

可能由于某些原因而发生这种情况,最常见的原因是Web / App服务器由于配置丢失或某些脚本/应用程序泄漏连接或错误地创建太多连接而意外地创建大量连接时

答案 2 :(得分:1)

在这种情况下,max_connections无关紧要,并且无法在网络服务器级别进行控制(因此,没有PHP或htaccess指令会有所帮助)

该错误的意思是您的数据库用户名在数据库服务器上有太多打开的连接。发生这种情况的原因可能很多:

  
      
  1. 流量太大
  2.   

这可能是一个快乐的问题。太多的并发可能会单独导致此问题,最简单的解决方案是获取具有更好规格的新数据库服务器来处理负载,然后增加数据库用户的max_connections限制。 但是,就好像快乐路径一样,我通常会认为这不是罪魁祸首,因为构建良好的网站与数据库交互可以处理数百个(或更多)并发用户,而不会接近max_connections限制(当前,我正在在我管理的一个小型网站上看到300个并发用户,并且数据库上的开放连接稳定在5)

  
      
  1. 连接保持打开状态
  2.   

可能不是这种情况,但请确保在使用它们后关闭代码上的数据库连接。 PHP通常会自行处理此问题,但是无论如何您自己都要终止连接是一个好习惯

  
      
  1. 在每个综合浏览量上打开到同一数据库的多个连接
  2.   

一个常见的错误是为您需要运行的每个查询建立数据库连接,而不是为与浏览量相关的每个查询仅建立一个连接。如果您的网站是高度动态的并且需要大量的数据库数据,则您可以很容易地在每次匹配中运行20-30个或更多查询。如果您要为每个连接打开一个新的连接,则可能会很快达到max_connections限制(特别是如果查询需要很长时间才能运行……很长一段时间要超过几百毫秒)

我的建议是在代码开始时打开一次数据库连接,最后关闭它,并使用该链接在两者之间运行所有查询。除了不轻易达到max_connections限制外,您还可以免除多次实际连接数据库服务器的开销,从而提高性能

答案 3 :(得分:0)

错误警报! 我终于设法加入了我的房东助理,他们告诉我这是一个内部问题。大多数客户都会受到影响,通过查看我的统计信息,他们可以向我保证我通常不会超出限制。抱歉,此自动应答不会给很多用户带来帮助。好吧,如果遇到此错误,请尝试首先与您的帮助联系。 感谢那些花时间给我的情报和建议的人。