max_user_connections错误含义和修复

时间:2016-04-05 17:24:47

标签: mysql

我从mysql收到此错误: “无法连接到数据库[用户xyzxyz已经超过'max_user_connections'活动连接”

我当前的max_user_connections = 50,我在VPS上运行

作为第一步(我读到它应该有帮助的地方)我创建了一个新的mysql用户,它将处理我网站上大部分操作的所有后台操作。所以现在我有2个用户:

  • xyzxyz_backgrounds-处理后台操作
  • xyzxyz_users - 仅处理从实际站点的用户生成的mysql调用。

仍然在更改后,用户报告“xyzxyz_users已超过'max_user_connections'活动连接”

这是我运行的一个繁忙的网站,但我想知道是否我的代码中没有错误导致此错误。

我尝试运行“SHOW PROCESSLIST”和“SHOW FULL PROCESSLIST”,但我只看到2行返回(一个SLEEP和一个QUERY of the show processlist)。

据我所知,我没有任何类型的持久性mysql连接

下面是我在每个php文件的头部使用启动mysql连接的代码(使用'require')

if (!(isset($use_pdo))) {
  $conn_mls = mysql_connect($dbhost, $dbuser, $dbpass);
  mysql_select_db($dbname);
  mysql_query("SET NAMES utf8");

}else{
    $options = array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    );
    $dsn = "mysql:host=127.0.0.1;dbname=$dbname;charset=utf8";
    $conn = new PDO($dsn, $dbuser , $dbpass , $options);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

};

在某些情况下我使用mysqli,我不认为我在那里使用持久连接,如果需要我可以发布代码。

mysql什么时候创建新连接? 如果我有max_user_connections = 50这是否意味着只有50个用户可以同时连接到该网站? 我是否需要手动关闭代码中的连接,或者mysql是否自己处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

我建议在任何地方实施持久性PDO连接(如果能够预算时间)并在需要时增加最大连接数。这也将提高应用程序的一致性和可读性。

正如我在评论中提供的链接所解释的那样,PDO缓存持久连接:

  

&#34;许多Web应用程序将从持久连接中受益   到数据库服务器。持久连接最终没有关闭   脚本但是在另一个脚本请求时被缓存并重新使用   使用相同凭据的连接。持久连接   缓存允许您避免建立新的开销   每次脚本需要与数据库通信时产生连接   在更快的Web应用程序中。&#34;

我不确定这会解决您的连接问题,但它会提高性能并可能对您的连接问题产生积极影响,具体取决于多个用户是否具有相同的凭据。当然,如果您能够增加最大连接数以支持所有并发用户,那么您可以在不实施PDO持久连接的情况下这样做。