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.NET3.5です。Windows / IISで何年もの間、岩のように堅実に動作します。9か月前、私たちの市場は私たちをWindowsから脱却させたので、私たちは(簡単に追加するかもしれませんが)すべてをMono/Apacheに移しました。

  • この問題はMono側でのみ発生しますが、Windowsのサポートを終了したため、これは重大です。

  • 平均して1時間に約10回発生しますが、間隔は大きく異なります。

  • この問題は、次の構成で確認されています。

Ubuntu 11 / Apache2 / mod_mono
OSX Lion / Apacke2 / mod_mono
Ubuntu 11 / xsp2/MonoDevelopデバッグサーバー
OSXLion/ xsp2/MonoDevelopデバッグサーバー

  • キープアライブ、wait_timeout、connectionresetなどを台無しにして無駄にしました。タイミングは効果がないようです。このエラーは、接続タイムアウト後ではなく、conn.openで瞬時に発生します。

  • ここに手がかりがあります-アプリはPooling=falseでは絶対に実行されません。ほぼすべての接続試行が失敗します。もちろん、プールをオンにしたいのですが、それなしでは機能しない理由がわかりません。

  • アプリケーションには、2分ごとに「ハートビート」(データベース内のユーザーのセッション)が組み込まれています。

  • すべての中で最も腹立たしいですか?実行中の環境でオンデマンドで再現することは絶対にできません。ランダムです。クエリのサイズや実行時間などを調べました。

  • ちょうど1つのシナリオで、それを実現できます。UbuntuサーバーまたはOSXの最初の起動時に、Monoが初めてMySQLに接続するとき、それが発生します。その後、それは誰の推測でもあります。

4

1 に答える 1

0

わかりました、これは古いですが、私はこれで多くの時間を失いました。私が最終的に見つけたこの命を救う記事を共有する必要があります: Getting Mono and Mysql to play nice together

そして、いつかリンクが 404 になる場合についてまとめます。接続文字列のすべての変数を定義する必要があります。そうです、これにはportが含まれます。これまでの人生で接続文字列で定義する必要はありませんでした。

私にとっては、問題を解決しました。

于 2014-08-29T11:34:28.030 に答える