【问题标题】:Why I am getting max_user_connections SQL Error? [duplicate]为什么我收到 max_user_connections SQL 错误? [复制]
【发布时间】:2015-11-13 11:09:20
【问题描述】:

为什么我的网站http://elancemarket.com/ 一次又一次地收到此错误?

Error establishing a database connection

SQL ERROR [ mysqli ]
User elancema_user already has more than 'max_user_connections' active connections [1203]

Warning: mysqli::mysqli(): (HY000/1203): User elancema_user already has more than 'max_user_connections' active connections in /home/elancemarket/public_html/ask/qa-include/qa-db.php on line 66

我使用的是非常昂贵的 VPS!

【问题讨论】:

  • MySQL 配置中的 max_user_connections 是什么?显然太低了。
  • @Andrius 我的服务器提供商告诉我,它设置为 20,这是正常的,因为在几秒钟内创建和删除数据库连接!
  • 好吧,将它设置为更高的值。如果它是一个非常复杂的网站,您可能会在每次加载时建立超过 20 个连接。
  • @Andrius 好的,让我让我的服务器提供商增加限制。我想,我正在使用多个 cms,这就是我过于频繁地达到最大连接数限制的原因。
  • 这个老问题的状态如何?

标签: php mysql wordpress phpbb3 question2answer


【解决方案1】:

最好的办法是增加max_user_connections。对于服务于三个不同 Web 应用程序(原始 php、WordPress、phpBB)的 MySQL 实例,您可能希望此值至少为 60。

发出这个命令,你会发现你有多少全局连接可用:

show global variables like '%connections%'

您可以像这样找出在任何给定时刻正在使用的连接数:

show status like '%connected%'

你可以像这样找出每个连接在做什么:

show full processlist

如果我是你,我会尝试至少 100 个连接的全局值。如果您无权执行此操作,您的服务提供商应该能够帮助您。它需要在 MySQL 的 my.cnf 文件配置中完成。不要将其设置得太高,否则您的 MySQL 服务器进程会占用所有 RAM。

第二种方法允许您将这些整体连接分配给不同的 MySQL 用户。如果您的每个 Web 应用程序都有不同的 MySQL 用户名,那么这种方法将适合您。这种方法写在这里。 https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/

控制这个问题的最终方法更加微妙。您可能正在使用 Apache Web 服务器作为底层技术。您可以减少同时运行的 Apache 任务的数量,从而增加吞吐量。那是因为 Apache 将请求排队。如果它有几个任务有效地通过队列,那通常比很多任务更快,因为竞争更少。它还需要更少的 MySQL 连接,这将解决您的直接问题。这在这里解释:Restart Mysql automatically when ubuntu on EC2 micro instance kills it when running out of memory

顺便说一句,像 WordPress 这样的网络应用程序使用持久连接池。也就是说,它们建立与 MySQL 数据库的连接,保持它们打开并重用它们。如果您的应用程序很忙,则每个连接的生命周期应该是几分钟。 (根据过于简单的陈述db 连接在几分之一秒内创建和删除,您的托管服务提供商的支持技术不了解这部分网络应用程序操作的微妙之处。)

【讨论】:

    【解决方案2】:

    服务器向您抛出此错误:

    SQL ERROR [ mysqli ] User database_user already has more than 'max_user_connections' active connections [1203]
    

    这意味着特定的数据库用户此时已经用完了所有并发连接,无法处理更多。

    在不进行任何编程更改的情况下进行修复的唯一选择是更改 MySQL 配置中的 max_user_connections 值。 Linux 上的配置文件通常为/etc/my.cnf

    其他解决方案可能是:

    • 在网站本身中执行较少的查询
    • 如果不同项目使用相同的数据库用户,则为不同的项目创建单独的数据库用户。

    您可以通过运行命令SHOW VARIABLES LIKE 'max_user_connections'; 来检查用户的当前值。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多