mysql - “max_user_connections”设置为 200 - 仍然出现错误

标签 mysql error-handling overloading

这是 mysql 错误: 连接失败:用户“db2498”已超出“max_user_connections”资源(当前值:200)。

我设置了my.cnf:

[mysqld]
max_connections = 500
max_user_connections = 200

我还将 mysql 中用户的 max_user_connections 设置为 200。大约 10 到 20 分钟内就有 1400 人访问了该网站。每次平均停留时间为 14 秒,我收到了大约 1400 条这样的消息。

我正在使用 PHP/Mysql。这是数据库类:

class DB{

public function __construct(){
    $this->conn = new mysqli($this->host,$this->user,$this->pass,$this->db);
    /* check connection */      
}
public function selectSomething(){
    /* select data & return */
}
public function __destruct()
{
$this->conn->close();
} 
}

我是这样调用它的:

$conn = new DB();
$result = $conn->selectSomething();
/* do something */

$result = $conn->selectSomething();
/* do something */

$result = $conn->selectSomething();
/* do something */

用户在网站上的平均停留时间为 14 秒。为什么我会收到此错误?是破坏吗?我的数据库包装器设置错误吗?我迷路了,技术支持也没有多大帮助。

最佳答案

至于您的“最大连接数”问题,可能是以下三种情况之一:

1) 服务器已经有太多打开的连接。 MySQL 服务器只能处理特定数量的打开连接,然后拒绝允许更多连接,并且该限制由服务器的所有用户共享。它通常设置得相当高,尽管有人很容易通过建立大量连接来有效地对 MySQL 服务器进行 DoS(但见下文)

2) 您的用户帐户每小时允许的连接数量有限 - 该小时内任何进一步的连接都将被拒绝。这是根据每个用户设置的。

3) 您的用户帐户允许的打开连接数量有限 - 任何进一步的连接都将被拒绝。这是根据每个用户设置的。

阅读连接尝试时返回的错误消息始终很重要,因为在大多数情况下,这将查明失败的确切原因。

如果您的帐户有最大连接数限制(场景#3),错误将是: 代码:

ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_user_connections' resource (current value: 1) 

其中“mysqldba”是您的用户名,“当前值”是该用户允许的最大打开连接数。

如果您的帐户有每小时最大连接数限制(场景#2),错误将是: 代码:

ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_connections_per_hour' resource (current value: 1) 

其中,“mysqldba”将是您的用户名,“当前值”是该用户每小时允许的最大连接数。

如果您收到错误消息(代码 1040),则表明整个 MySQL 服务器已耗尽连接插槽 - 这就是我上面提到的 DoS 场景。

你能做些什么呢?根据您所说,您在此服务器上没有 super 用户权限,因此除了向负责该服务器的系统管理员投诉之外,什么也没有。他们可能会增加允许的最大连接数,这可以在短期内解决问题,但如果使用服务器的其他人创建了愚蠢数量的数据库连接,则插槽将再次填满。他们可能应该做的是还强制执行每个用户的最大打开连接限制 - 这将阻止大量用户堵塞服务器。在像您这样的共享服务器情况下,这最有意义 - “高级用户”将/应该拥有自己的服务器,或者可以/应该付费以增加其最大开放连接数。

关于mysql - “max_user_connections”设置为 200 - 仍然出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389201/

相关文章:

c++ - 对重载函数的模糊调用 - int 和 int&

php - 什么是编写 php mysql 函数的最佳方法?

php - 在具有多个值的字符串中搜索 Symfony 3

Php JSONArray解码并执行数据库操作

php - PHP 中的数据库错误处理

c++ - 使用 cout 运算符重载字符串

php - 在 ubuntu 12.04 上进行 Alfresco 安装,并使用现有的 efront 部署

vba - 如果只能存在一个错误对象,那么声明 ErrObject 变量有什么用?

c# - ASP .Net MVC中的错误处理

C++ 传递一个结构并传递一个可互换的指针?