【问题标题】:max_user_connections error meaning and fixingmax_user_connections 错误含义和修复
【发布时间】:2016-04-05 17:24:47
【问题描述】:

我从 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)。

据我所知,我没有任何类型的持久 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自己处理?

【问题讨论】:

  • 为什么同时使用 PDO 和 mysqli?此页面:php.net/manual/en/pdo.connections.php 可能会有所帮助。
  • 假设我愿意。它有什么不同吗?与 pdo、msqli 和旧版 mysql 有不同的连接吗?如果我的所有页面都是 pdo,并且我有 100 人试图访问该站点,我还会收到此错误吗?

标签: mysql


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2021-11-30
    • 2016-11-19
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多