2

为什么我在我的网站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 上!

4

2 回答 2

7

你最好的选择是增加max_user_connections。对于服务于三个不同 Web 应用程序(原始 php、WordPress、phpBB)的 MySQL 实例,您可能需要至少 60 的值。

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

show global variables like '%connections%'

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

show status like '%connected%'

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

show full processlist

如果我是你,我会尝试至少 100 个连接的全局值。如果您无权执行此操作,您的服务提供商应该能够帮助您。它需要在my.cnfMySQL 的文件配置中完成。不要把它设置得太高,否则你的 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 kill it when running out of memory

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

于 2015-11-13T11:55:18.253 回答
4

服务器向您抛出此错误:

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

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

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

其他解决方案可能是:

  • 在网站本身做更少的查询
  • 如果他们使用相同的数据库用户,则为不同的项目创建单独的数据库用户。

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

于 2015-11-13T11:52:28.563 回答