5

这个要死我了。我们在 MySQL 数据库上有一个 ASP.NET/Mono 应用程序。几个月来,我们一直被完全随机但始终如一的“无法连接到任何指定的 MySQL 主机”所困扰。我绝不是 MySQL 专业人士,我希望这是愚蠢的。

细节:
MySQL 5.5.17
MySQL Connector/Net 6.4.4
Mono 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 的情况下运行。几乎每次连接尝试都会失败。当然,我想集中精力,但我不确定为什么没有它就行不通。

  • 该应用程序有一个内置的“心跳”(数据库中的用户会话) - 每 2 分钟一次。

  • 最让人抓狂的?它绝对不能在运行环境中按需复制——它是随机的。我检查了查询大小、执行时间等。

  • 在一种情况下,我可以做到这一点:在 Ubuntu 服务器或 OSX 的初始启动时,Mono 第一次连接到 MySQL - 它会在那时发生。在那之后,这是任何人的猜测。

4

1 回答 1

0

好的,这是旧的,但我在这方面浪费了很多时间,我必须分享这篇我终于找到的拯救生命的文章:让 Mono 和 Mysql 一起玩得很好

我总结了链接在某天最终到达 404 的情况:必须定义连接字符串的每个变量。所以,是的,这包括port,我以前从来没有在连接字符串中定义过它。

对我来说,它解决了这个问题。

于 2014-08-29T11:34:28.030 回答