我的应用程序需要频繁地连接到另一台机器上的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以及对bug的评论http://bugs.mysql.com/bug .php?id = 28359 。
你可以看到有相当多的中断连接:
mysql> SHOW GLOBAL STATUS LIKE'Aborted_connects'; + ------------------ + ------- + | variables名| 值| + ------------------ + ------- + | Aborted_connects | 2540 | + ------------------ + ------- +
我把超时时间从5秒增加到了15秒:
mysql>显示variables像'connect_timeout'; + ----------------- + ------- + | variables名| 值| + ----------------- + ------- + | connect_timeout | 15 | + ----------------- + ------- +
但这并没有帮助。 任何build议如何debugging呢? 当数据库平均在连接5次之前尝试连接时,会使数据库交互非常慢。
我还没有试图保持连接在应用程序的生命周期中打开,那会更好吗? 如何防止连接closures?
如果它帮助有问题的计算机是Windows 7 32位,而MySQL服务器在Debian Linux上。
仔细查看所有错误详细信息,我怀疑这里存在networking或客户端问题。 有些东西要么破坏,要么给mysql数据添加太多的延迟。
在一个清晰的networking上,做一个wireshark跟踪并检查对话是什么样的。 确保任何地方都没有stream量整形。 似乎只是一个64位的问题,所以检查一个32位版本,以确保它是同样的问题。 检查一个Windows XP的盒子 – M $做了一些时髦的东西到Vista上的networking堆栈,这使得它有点时间! 我们没有与Vista和Win7机器的networking问题的结束!
如果你确实pipe理一个wireshark跟踪请pastebin和链接,因为我们都想看看我的想法。
最后,这是由于机器上一个普遍的networking问题。 该解决scheme发现在: Windows 7上的networking性能问题