【问题标题】:'max_user_connections' set to 200 - still getting error'max_user_connections' 设置为 200 - 仍然出现错误
【发布时间】:2012-03-12 10:48:53
【问题描述】:

这里是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 秒。为什么我会收到此错误?是毁灭吗?我的数据库包装器设置错误吗?我迷路了,技术支持帮不上什么忙。

【问题讨论】:

    标签: mysql error-handling overloading


    【解决方案1】:

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

    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 场景。

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

    【讨论】:

    • 我可以苏。这是我的盒子。这是错误:警告:mysqli :: mysqli()[mysqli.mysqli]:(42000/1226):用户'user3903'已超过'max_user_connections'资源(当前值:200)。我有权更改这些值。我已经更改了 my.cnf。它是我的数据库包装器吗?连接没有关闭吗?
    • 我怀疑连接没有正确关闭。能不能尝试改用持久连接,即mysql_pconnect(...),有时mysqli wrapper不能正常工作...
    • @bodi0 已死。确保在完成查询后使用 mysqli::close。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2016-11-19
    相关资源
    最近更新 更多