CodeIgniter 网站上的错误"too many connections"



我已经阅读了这里关于堆栈溢出的所有问题/答案,但不幸的是,没有一个解决我的问题。

在过去的几天里,mysql错误"连接太多"不断出现在网站日志上,它会挂起每个客户端的整个网站。事实上,它将所有网站都挂在服务器上。

以下是我的问题/备注:

  • 大约有50个不同的客户端数据库,另外2个是所有客户端通用的
  • 对于所有连接,pconnect已为FALSE
  • 在文件"php.ini"中,变量"allowpersistent"为On。即使我写pconnect=FALSE,这是否会使mysql连接永久?(我无法更改"allowpersistent"变量,必须询问托管公司(
  • 有三个文件加载数据库,一个加载客户端的数据库,另两个加载所有客户端的公共数据库,它们在每个模型的构造方法上都被调用,但CI应该在完成mysql连接后关闭它们,并忽略任何已经加载的"load->database">
  • "db->close"显然没有任何作用,因为这个->db->database在我关闭它之后会保持它的值:P
  • 在我写这篇文章的时候,Threads_connected多达1000个,而网站已经关闭:(
  • mysql配置的max_connections=1000,是否可以进一步增加?我看自由记忆没有变化,那么会发生什么呢
  • 我应该换成PDO吗?我正在使用数据库驱动程序"mysqli">
  • 我应该要求托管公司降低mysql变量"wait_timeout",以便快速关闭数据库连接吗
  • 我应该更新CodeIgniter吗?我有3.1.4版本,现在是3.1.9

非常感谢您的帮助!

在我们的案例中,解决方案将mysql变量"wait_timeout"从8小时(默认值为wtf!?(降低到180秒。如果需要,它仍然可以降低更多。这必须由托管公司完成,因为我们没有对服务器的root访问权限。

我在问题中提到的所有其他解决方案都不起作用,比如"pconnect=false"one_answers"db->close"。

"Threads_connected"现在总是低于100或200,而不是此修复之前的近1000。

我的团队花了两天时间来解决这个问题,网上有很多人在寻求解决方案,但没有任何(有效的(答案。

干杯:(

我也遇到了同样的问题。当我用以下查询检查MySQL中当前活动连接的数量时:

show processlist

睡眠模式下有很多连接。在四处搜索后,我发现:

创建数据库连接时,还会同时在数据库服务器上创建会话,但如果该连接和会话未正确关闭,则等待时间结束后,查询将进入睡眠模式。

为了解决这个问题,我以@Pedro的身份,在mysql:中运行以下命令,将wait_timeout更改为180

SET GLOBAL wait_timeout = 180;

使用这种方法,您不需要重新启动mysql服务即可生效。

您可以在此处阅读更多信息:https://www.znetlive.com/blog/what-is-sleep-query-in-mysql-database/

相关内容

  • 没有找到相关文章

最新更新