Azure Database for MySQL - フレキシブル サーバーでの接続に関する問題のトラブルシューティング

適用対象: Azure Database for MySQL - 単一サーバー Azure Database for MySQL - フレキシブル サーバー

重要

Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください

MySQL Community Edition では、接続ごとに 1 つのスレッドを使用して接続が管理されます。 その結果、ユーザー接続ごとに mysqld プロセスで専用のオペレーティング システム スレッドが取得されます。

この種類の接続処理に関連する潜在的な問題があります。 たとえば、多数のユーザー接続がある場合、それらがアイドル状態の接続であっても、メモリ使用量は比較的高くなります。 さらに、何千ものユーザー接続を処理する場合は、内部サーバーの競合とコンテキスト切り替えのオーバーヘッドが高くなります。

一般的な接続エラーを診断する

Azure Database for MySQL フレキシブル サーバーのインスタンスで接続の問題が発生するたびに、クライアント デバイス、ネットワーク、または Azure Database for MySQL フレキシブル サーバー インスタンスの 3 つのレイヤーのいずれかに問題が存在する可能性があります。

その結果、接続エラーを診断するときは常に、次の事項の詳細を必ず考慮してください。

  • クライアント(以下を含む):
    • 構成 (オンプレミス、Azure VM など、または DBA マシン)。
    • オペレーティング システム。
    • ソフトウェアとバージョン。
  • 接続文字列と、含まれているパラメーター。
  • ネットワーク トポロジ (同じリージョン? 同じ AZ? ファイアウォール規則? ルーティング)。
  • 接続プール (パラメーターと構成) (使用されている場合)。

また、データベース接続の問題が単一のクライアント デバイスまたは複数のクライアント デバイスに影響を与えるかどうかを判断することも重要です。 エラーが複数のクライアントの 1 つだけに影響している場合は、そのクライアントに問題がある可能性があります。 しかし、すべてのクライアントで同じエラーが発生している場合は、データベース サーバー側またはその間のネットワークに問題がある可能性が高くなります。

ワークロードの過負荷の可能性も考慮してください。特に、アプリケーションが非常に短時間で急増する接続を開く場合は注意が必要です。 これを調査するには、"合計接続数"、"アクティブな接続"、"中止された接続" などのメトリックを使用できます。

クライアント デバイスまたはアプリケーションからの接続を確立する場合、mysql の最初の重要な呼び出しは getaddrinfo です。これにより、指定されたエンドポイントから IP アドレスへの DNS 変換が実行されます。 アドレスの取得に失敗すると、MySQL に "ERROR 2005 (HY000): 不明な MySQL サーバー ホスト 'mysql-example.mysql.database.azure.com' (11)" などのエラー メッセージと末尾の番号 (11、110 など) が表示されます。

クライアント側エラー 2005 コード

一部のクライアント側エラー 2005 コードのクイック リファレンス ノートを次の表に示します。

エラー 2005 コード
(11) "EAI_SYSTEM - システム エラー" クライアント側の DNS 解決にエラーがあります。 Azure Database for MySQL フレキシブル サーバーの問題ではありません。 クライアントで dig/nslookup を使用してトラブルシューティングを行います。
(110) "ETIMEDOUT - 接続がタイムアウトしました" クライアントの DNS サーバーへの接続でタイムアウトが発生しました。 Azure Database for MySQL フレキシブル サーバーの問題ではありません。 クライアントで dig/nslookup を使用してトラブルシューティングを行います。
(0) "名前が不明です" 指定された名前が DNS で解決できませんでした。 クライアントの入力を確認してください。 これは、Azure Database for MySQL フレキシブル サーバーでは問題にならない可能性が非常に高いです。

mysql の 2 番目の呼び出しはソケット接続で、"ERROR 2003 (HY000): 'mysql-example.mysql.database.azure.com' (111) 上の Azure Database for MySQL フレキシブル サーバーに接続できません(111)"、末尾の番号 (99、110、111、113 など) のようなエラー メッセージを確認します。

クライアント側エラー 2003 コード

一部のクライアント側エラー 2003 コードのクイック リファレンス ノートを次の表に示します。

エラー 2003 コード
(99) "EADDRNOTAVAIL - 要求されたアドレスを割り当てることができません" このエラーは、Azure Database for MySQL フレキシブル サーバーによって発生するものではなく、クライアント側にあります。
(110) "ETIMEDOUT - 接続がタイムアウトしました" 指定された IP アドレスへの接続でタイムアウトが発生しました。 セキュリティ (ファイアウォール規則) またはネットワーク (ルーティング) の問題の可能性があります。 通常、これは Azure Database for MySQL フレキシブル サーバーの問題ではありません。 クライアント デバイスで nc/telnet/TCPtraceroute を使用してトラブルシューティングを行います。
(111) "ECONNREFUSED - 接続が拒否されました" パケットがターゲット サーバーに到達している間、サーバーで接続が拒否されました。 これは、間違ったサーバーまたは間違ったポートに接続しようとしている可能性があります。 これは、ターゲット サービス (Azure Database for MySQL フレキシブル サーバー) の停止、フェールオーバーからの復旧、クラッシュ復旧の実行、接続の受け入れがまだ行われていない場合にも関係する場合があります。 この問題は、クライアント側またはサーバー側のいずれかにある可能性があります。 クライアント デバイスで nc/telnet/TCPtraceroute を使用してトラブルシューティングを行います。
(113) "EHOSTUNREACH - ホストに到達できません" クライアント デバイスのルーティング テーブルには、データベース サーバーが配置されているネットワークへのパスは含まれていません。 クライアント デバイスのネットワーク構成を確認してください。

その他のエラー コード

データベース サーバーとのネットワーク接続が正常に確立された後に発生する問題に関連するその他のエラー コードのクイック リファレンス ノートを次の表に示します。

エラー コード
エラー 2013 "MySQL サーバーへの接続が失われました" 接続は確立されましたが、その後失われました。 これは、MySQL 以外のものに対して接続が試行された場合に発生する可能性があります (たとえば、MySQL クライアントを使用してポート 22 で SSH に接続するなど)。 また、スーパー ユーザーがセッションを強制終了した場合にも発生する可能性があります。 また、データベースでセッションがタイムアウトになった場合にも発生する可能性があります。 または、接続が確立された後に、データベース サーバーの問題を参照することもできます。 これは、クライアント接続の有効期間中にいつでも発生する可能性があります。 データベースに重大な問題が発生したことを示している可能性があります。
エラー 1040 "接続が多すぎます" 接続されているデータベース クライアントの数が、既に構成されている最大数に達しています。 データベースに対して非常に多くの接続が確立される理由を評価する必要があります。
エラー 1045 "ユーザーのアクセスが拒否されました" クライアントが正しくないユーザー名またはパスワードを指定したので、データベースがアクセスを拒否しました。
エラー 2006 "MySQL サーバーが消失しました" 前の表の エラー 2013 "MySQL サーバーへの接続が失われました" のエントリと同様です。
エラー 1317 "クエリの実行が中断されました" プライマリ ユーザーが接続ではなくクエリを停止したときにクライアントが受け取るエラー。
エラー 1129 "ホスト '1.2.3.4' は多数の接続エラーのためにブロックされています" 'mysqladmin flush-hosts' でブロックを解除します" - 1 台のマシンの 1 つのクライアントが間違ったプロトコルを使用して MySQL に接続しようと何度も試みた場合、そのマシンのすべてのクライアントがブロックされます (MySQL ポートへの Telnet 接続は一例です)。 エラー メッセージに示されているように、データベースの管理者ユーザーは、問題を解決するために FLUSH HOSTS; を実行する必要があります。

次のステップ

重要度の高い質問に対する回答を見つける、質問を投稿する、または回答するには、Stack Overflow にアクセスしてください。