我有100个PC客户端通过局域网连接到MySQL。
他们正在运行没有特定period.Statistically的插入查询,同时只有10台PC试图运行INSERT查询。这不是设计上的限制,只是查询的执行取决于每个PC用户的活动。
每个客户端每次需要运行INSERT查询时都会连接和断开连接(connect - insert - disconnect)。
几个月来,一切正常,但几天前,客户端开始在连接上失败。
大约一天两次,在5-10分钟内,客户无法联系。它们接收超时错误。在这段时间内,所有PC客户端都无法连接。他们中没有人能连接起来。
失败的时刻是随机的。有时发生在09:00,有时发生在13:00等。每个用户的活动都是很有规律的,所以从一天到另一天没有多少不同。我是说,一天中的这一小时似乎没什么意义。
在服务器端,我看到mysql日志中没有错误,没有服务崩溃,也没有服务器重新启动。我只启用错误日志(没有查询日志,没有慢速查询日志).
然后我在寻找一个网络问题,但是从PC到服务器,从服务器到PC的追踪是正确的。
我在服务器上(与wireshark一起)进行了网络捕获,以查看是否可以在那里找到错误。
在错误期间( 5-10分钟),我看到来自PC客户端的连接卡在“问候”消息中。客户端PC不发送“登录”请求作为回应。
发布于 2015-05-19 16:12:14
深入网络追踪,我发现了一些名字解析问题。
我正在运行5.1.41版本的MySQL社区版。我不知道更多的实际版本是否是这样,但是在这个版本中,默认启用了“名称解析”功能。
启用名称解析后,每次网络连接启动时,MySQL都会尝试从其IP解析客户端的PC名称。
如果此名称解析失败或延迟,则可能导致连接问题。
随着名称解析下降,我们得到更多的失败和延迟连接,每次客户端PC重试,并最终没有成功的网络连接。
解决方案是禁用名称解析。如果您为一些依赖客户端主机名的MySQL用户定义了特权,则此特性非常重要。但是,由于我们没有基于客户端主机名的任何特权(相反,我们使用IP地址),所以我们可以安全地禁用“名称解析”争用。
这个链接解释了这一点,并为我指出了正确的方向和在网络中搜索的内容:
https://serverfault.com/questions/692080
复制相似问题