MySql クライアントの接続がランダムにタイムアウトする

MySql クライアントの接続がランダムにタイムアウトする

LAN 経由で MySQL に接続する PC クライアントが 100 台あります。

特定の期間なしで INSERT クエリを実行しています。統計的には、同時に 10 台を超える PC が INSERT クエリを実行しようとしていません。これは設計上の制限ではなく、クエリの実行が各 PC ユーザーのアクティビティに依存しているだけです。

各クライアントは、INSERT クエリ (接続 - 挿入 - 切断) を実行する必要があるたびに接続と切断を行います。

数か月間はすべて正常に動作していましたが、数日前からクライアントが接続に失敗し始めました。

1 日に 2 回ほど、5 ~ 10 分間、クライアントが接続できません。タイムアウト エラーが発生します。この期間中、すべての PC クライアントが接続に失敗します。いずれも接続できません。

失敗する時間はランダムです。時には 09:00 に発生し、時には 13:00 に発生するなどです。各ユーザーのアクティビティは非常に規則的であるため、日によって大きな違いはありません。つまり、時間帯は重要ではないようです。

サーバー側を見ると、mysql ログにエラーはなく、サービスがクラッシュしたり、サーバーが再起動したりもしていません。エラー ログのみが有効になっています (クエリ ログもスロー クエリ ログもありません)。

その後、ネットワークの問題を探していましたが、PC からサーバー、サーバーから PC への tracerts は正しかったです。

エラーが見つかるかどうか確認するために、サーバー上でネットワーク キャプチャ (Wireshark を使用) を実行しました。

エラー期間中 (5 ~ 10 分間)、PC クライアントからの接続が「挨拶」メッセージで停止しているのがわかります。クライアント PC は応答として「ログイン」要求を送信しません。

答え1

ネットワーク トレースを詳しく調べたところ、名前解決の問題がいくつか見つかりました。

私は MySQL Community Edition の 5.1.41 バージョンを実行しています。実際のリリースでも同様かどうかはわかりませんが、このバージョンでは、「名前解決」機能がデフォルトで有効になっています。

名前解決を有効にすると、ネットワーク接続が開始されるたびに、MySQL は IP からクライアントの PC 名を解決しようとします。

この名前解決が何らかの理由で失敗したり、遅延したりすると、接続の問題が発生する可能性があります。

名前解決がダウンすると、クライアント PC が再試行するたびに接続の失敗や遅延が増え、最終的にはネットワーク接続が成功しなくなります。

解決策は、名前解決を無効にすることです。この機能は、クライアントのホスト名に依存する一部の MySQL ユーザーに権限を定義している場合に重要です。ただし、クライアントのホスト名に基づく権限はないため (代わりに IP アドレスを使用します)、「名前解決」機能を安全に無効にできます。

これはそれを説明するリンクであり、正しい方向とネットワーク キャプチャで検索する内容を示しています。

参考:

関連情報