首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中“多个连续中断的连接请求”是什么?

问在MySQL中“多个连续中断的连接请求”是什么?
EN

Stack Overflow用户
提问于 2012-08-03 07:23:15
回答 2查看 4.6K关注 0票数 8

我经常有以下错误:

PHP致命错误:由于许多连接错误,消息'SQLSTATEHY000主机'MY SERVER‘的未命名异常’SQLSTATEHY000‘被阻塞;用'mysqladmin刷新-主机’解除阻塞

使用常规(如crontab) mysqladmin刷新主机命令或增加max_connect_errors系统变量(如这里 )很容易解决这个问题。

但是!什么是“多个连续中断的连接请求”,为什么会发生这种情况?

我宁愿在上游阻止这个问题,也不愿纠正阻塞。

MySQL版本: 5.5.12。我正在使用ZendFramework1.11.10和Doctrine2.1.6。

在我的PHP中没有mysql_close()或mysqli_close()。

max_connect_errors的默认值是10,我还不想增加它,我想知道为什么会出现错误。我使用一个cron,每5分钟执行mysqladmin刷新主机命令。

EN

回答 2

Stack Overflow用户

发布于 2012-08-10 06:39:36

此响应是作为一种安全措施设计的,并且是达到mysql的max_connection_errors值的结果。这里有一个链接 Oracle提供了详细说明大多数可能的原因和解决方案的内容。

最终,这意味着有如此多的连续连接失败,以至于MySql停止了对连接尝试的响应。

我使用一个cron,每5分钟执行mysqladmin刷新主机命令。

当你如此迅速地达到这个极限时,只有几个可能的罪魁祸首:

  1. 服务器未正确配置为使用PDO。
  2. 正在运行的代码包括经常创建新连接。
    • 导致快速到达max_connections值,导致所有后续连接尝试失败.这样很快就达到了max_connection_errors的极限。

​

  1. 代码正触及无限循环,或级联失败。
    • 很明显的可能性,但必须提到。
    • (即: pageA调用pageB和pageC,pageC调用PageA)

​

  1. PDO运行良好,但有些脚本需要很长时间才能运行,或者永远不会结束。
    • 捕捉这一点的最简单方法是降低max_execution_time.

​

无论发生什么情况,都很可能很难追查到。

  1. 记录每个mysql连接的堆栈跟踪,试图找出导致这种情况的代码。
  2. 检查mysql.err日志文件

虽然PDO不需要显式关闭mysql连接,但对于这种情况,有一些实践可以防止这种ServerAdmin搜索。

  • 始终显式关闭mysql连接。
    • 构建一个简单类来处理所有连接。打开,返回数组,关闭。
    • 唯一需要保持连接打开的时间是游标。

​

  • 始终在一个且只有一个文件中定义连接参数,该文件包含在任何需要的地方。
  • 永远不要增加max_execution_time,除非您知道您需要它,并且您知道服务器可以处理它。如果需要它,则显式地增加只需要它的脚本的值。Php.net/手册/en/function.set.time time-limit.php.time
    • 如果增加max_execution_time,,增加max_connections.

​

dev.mysql.com/doc/refman/5.0/en/cursors.html

票数 1
EN

Stack Overflow用户

发布于 2012-08-03 13:50:03

这意味着mysqld收到了来自给定主机的许多连接请求,这些请求在中间被中断。请从文档中查看此链接以获得更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11791128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档