我已经在堆栈溢出上阅读了关于此主题的所有问题/答案,但不幸的是,没有一个能解决我的问题。
在过去的几天里,mysql 错误“太多的连接”不断出现在网站日志中,它使每个客户端的整个网站挂起。事实上,它会挂起服务器上的所有网站。
所以这是我的问题/评论:
- 大约有 50 个不同的客户数据库,此外还有 2 个对所有客户都是通用的
- 所有连接的 pconnect 已经 = FALSE
- 在文件“php.ini”中,变量“allowpersistent”处于打开状态。即使我写 pconnect = FALSE,这是否会使 mysql 连接永久化? (我无法更改“allowpersistent”变量,必须询问托管公司)
- 有 3 个加载数据库的文件,一个加载客户端的数据库,另外两个加载所有客户端的公共(public)数据库,它们在每个模型的构造方法上调用,但 CI 应该在完成后关闭 mysql 连接他们并忽略任何已经加载的“加载->数据库”
- "db->close"显然什么都不做,因为 this->db->database 在我关闭它后保持它的值 :P
- 当我写这篇文章时,Threads_connected 高达 1000,网站已关闭 :(
- mysql配置有max_connections = 1000,能否进一步增加?我发现可用内存没有变化,那么会发生什么?
- 我应该改用 PDO 吗?我正在使用 dbdriver“mysqli”
- 我是否应该要求托管公司降低 mysql 变量“wait_timeout”,以便快速关闭数据库连接?
- 我应该更新 CodeIgniter 吗?我的版本是 3.1.4,现在是 3.1.9
非常感谢您的帮助!
最佳答案
在我们的例子中,解决方案是将 mysql 变量“wait_timeout”从 8 小时(默认值,wtf!?)降低到 180 秒。如果需要,它仍然可以降低更多。这必须由托管公司完成,因为我们没有服务器的根访问权限。
我在问题中提到的所有其他解决方案均无效,例如“pconnect = false”和“db->close”。
“Threads_connected”现在始终低于 100 或 200,而不是此修复之前的近 1000。
我的团队为这个问题苦苦挣扎了两天,网上有很多人寻求解决方案,但没有任何(有效的)答案。
干杯:)
关于php - CodeIgniter 网站上的错误 "too many connections",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53226015/