我的应用程序需要非常频繁地连接到另一台机器上的 mysql 数据库。但是我在连接时经常出错;我通常最终可以连接,但需要重试多次。我收到的错误消息是:
Mysql.mysql(): Couldn't connect to SQL-server: Lost connection to MySQL server at 'reading authorization packet', system error: 2
我已阅读此处的信息:http://dev.mysql.com/doc/refman/5.0/en/error-lost-connection.html以及对这个错误的评论http://bugs.mysql.com/bug.php?id=28359。
如您所见,有相当多的连接被中止:
mysql> 显示类似“Aborted_connects”的全局状态; +------------------+-------+ | 变量名称 | 值 | +------------------+-------+ | 中止连接 | 2540 | +------------------+-------+
我将超时时间从 5 秒增加到 15 秒:
mysql> 显示类似“connect_timeout”的变量; +-----------------+-------+ | 变量名称 | 值 | +-----------------+-------+ | 连接超时 | 15 | +-----------------+-------+
但这没有帮助。有什么建议可以调试吗?它使数据库交互变得非常慢,平均需要尝试连接 5 次才能正常工作。
我还没有尝试在应用程序的整个生命周期内保持连接打开,这样会更好吗?如何防止连接关闭?
如果它有助于解决问题,则计算机是 Windows 7 32 位,而 mysql 服务器在 Debian Linux 上。
答案1
浏览所有错误详细信息和报告后,我怀疑这里存在网络或客户端问题。某些东西要么损坏了 mysql 数据,要么给 mysql 数据增加了太多延迟。
在畅通的网络上,执行 wireshark 跟踪并检查对话情况。确保任何地方都没有进行流量整形。似乎只有 64 位问题,因此请检查 32 位版本以确保它是相同的问题。检查 Windows XP 机器 - M$ 对 Vista 上的网络堆栈做了一些奇怪的事情,这让它很糟糕 - 有点时间!我们在 Vista 和 Win7 机器上遇到了无数的网络问题!
如果您确实管理了 wireshark 跟踪,请使用 pastebin 并贴上链接,因为我想我们都想看一看。
答案2
最后发现这是由于机器上的一般网络问题。解决方案如下:Windows 7 上的网络性能问题