我们的网络环境由两台服务器组成。
- Web 前端。Dell PowerEdge R610、RHEL 5.5、Apache 2.2.17、php 5.2.14。
- 数据库服务器。Dell PowerEdge R710、Windows 2008 R2 Standard x64、MySQL 5.5.11-log x64。
通常情况下,这两个系统协同工作时效果很好。但是,当我尝试让它们通过辅助网卡(每台机器都有四个网卡)上的专用 LAN 进行通信时,事情就变得不稳定了。我在两台机器上都配置了 172.16.1.0/24 子网上的 NIC #2,没有网关或 DNS 服务器(显然,因为只有这两个系统),并且我将每台机器的私有 IP 地址放入另一台机器的 hosts 文件中。完成此操作后,两台机器上的路由表看起来都正常。
我尝试过使用交叉电缆直接连接两个网卡,也尝试过通过机架交换机上的专用 VLAN 连接。无论哪种情况,我都会遇到间歇性连接问题。连接失败的百分比相当小,但足以造成严重问题,我不得不切换回主网络连接,这将与交换机上的所有其他流量和主机竞争。
应用程序日志中出现的完整错误消息:
SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', system error: 110
我是不是做了什么蠢事导致它无法正常工作?我可以在 MySQL 中检查什么来解释为什么它偶尔无法连接?
答案1
我首先要排除的是数据包大小,不是网络数据包大小,而是 MySQL 数据包大小。确保设置最大允许数据包数设置为足够大的值,特别是当您的网站使用 BLOB 数据时。
我看到一个奇怪的论坛涉及同一问题。论坛讨论了一些有关删除或使用绑定地址(尽管有远程连接)的事情。
请看一下这个,看看是否有帮助。
答案2
检查您的日志,我最近遇到了相同的问题,结果发现是损坏的 innodb 命名空间导致 MySQL 在任何简单查询上丢失连接。
-托尼
答案3
MySQL 错误 110 似乎是“连接超时”。确保连接在 MySQL 之外有效(ping 其他主机,尝试远程登录到 MySQL 端口 3306)。如果这不起作用,请检查服务器上的防火墙设置。尝试将网络类型设置为“域配置文件”。否则 Windows Server 2008 的行为会非常奇怪。