这个简直要了我的命。我们在 MySQL 数据库上有一个 ASP.NET/Mono 应用程序。几个月来,我们一直被“无法连接到任何指定的 MySQL 主机”的完全随机但一致的事件所困扰。我绝不是 MySQL 专家,我希望这是愚蠢的事情。
细节:
MySQL 5.5.17
MySQL 连接器/Net 6.4.4
单声道 2.10.8
MonoDevelop 2.8.6.5
连接字符串:SERVER=localhost,3306;DATABASE=xxx;UID=xxx;PWD=xxx;CONNECTION TIMEOUT=90;Encrypt=false;
Max_connections 设置为 150。永远不会超过 5 个连接,并且它们都是事件的(可能是由于池)。
应用程序是 C# ASP.NET 3.5。在 Windows/IIS 上稳定运行多年。九个月前,我们的市场让我们摆脱了 Windows,所以我们(很容易补充)将整个事情转移到 Mono/Apache。
该问题仅出现在 Mono 端,但这很关键,因为我们已经停止了对 Windows 的支持。
平均每小时发生 10 次,但间隔变化很大。
已在以下配置中发现该问题:
Ubuntu 11/Apache2/mod_mono
OSX Lion/Apacke2/mod_mono
Ubuntu 11/xsp2/MonoDevelop调试服务器
OSX Lion/xsp2/MonoDevelop 调试服务器
搞砸了 keepalive、wait_timeout、connectionreset 等都无济于事。时间似乎没有影响。该错误是在 conn.open 上即时出现的 - 而不是在任何连接超时之后。
这里有一条线索 - 该应用绝对不会在 Pooling=false 的情况下运行。几乎每次连接尝试都会失败。我当然想要汇集,但我不确定为什么没有汇集就无法工作。
该应用程序有一个内置的“心跳”(用户在数据库中的 session )- 每 2 分钟一次。
最令人抓狂的是?它绝对不能在运行环境中按需复制——它是随机的。我检查了查询大小、执行时间等。
我只能在一种情况下实现它:在 Ubuntu 服务器或 OSX 的初始启动时,Mono 第一次连接到 MySQL - 然后它就会发生。在那之后,这是任何人的猜测。
最佳答案
好吧,这是旧的,但我在这上面浪费了太多时间,我必须分享这篇我终于找到的救命文章:Getting Mono and Mysql to play nice together
我总结了某天链接以 404 结束的情况:必须定义连接字符串的每个变量。所以,是的,这包括端口,我以前从来没有在连接字符串中定义过它。
对我来说,它解决了这个问题。
关于MySql *完全随机* 无法连接到任何指定的 MySQL 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369981/