Amazon RDS MySQL で「通信パケットの読み取り中にエラーが発生しました」というエラーを解決するにはどうすればよいですか?

最終更新日: 2021 年 8 月 6 日

Amazon RDS MySQL で「通信パケットの読み取り中にエラーが発生しました」というエラーが表示されました。どうすればこのエラーを解決できますか?

簡単な説明

サーバーとクライアントの接続が切断された場合、不適切に閉じられた場合、または失敗した場合、Amazon Relational Database Service (Amazon RDS) MySQL はaborted_clientsまたはaborted_connectsのいずれかのステータスカウンタを増やします。

log_error_verbosityが 2 の値を超えると、RDS MySQL はエラーログに次の情報を書き込みます。

[Warning] Aborted connection xxx to db: '<database name>' user: '<user name>' host: '<host IP>' (Got an error reading communication packets)

この警告は、aborted_clientsまたはaborted_connectsメトリクス値のステータスカウンタが増加するたびにトリガーされます。Amazon RDS は、データベースエラーログを使用してこの情報を取得します。詳細については、MySQL サーバー Web サイトでの「通信エラーと中断された接続」を参照してください。

中断された接続警告をトリガーする要因には、以下が含まれます(ただし、これらに限定されません)。

  • クライアントまたはドライバの非互換性
  • ファイアウォールまたはプロキシ。アイドル状態の接続を閉じたり、接続をブロックしたりできます。
  • クライアント/サーバー接続の不適切な終了により、Amazon RDS MySQL 内でスリープしている接続の数が増えます。
  • wait_timeout または interactive_timeout しきい値を超えるアイドル状態の接続。
  • 接続を不適切に終了するクライアントアプリケーション。
  • 接続パケットを取得するときに connect_timeout 秒のしきい値を超えるクライアント接続。
  • max_allowed_packet パラメータの値を超えています。インスタンスが Amazon RDS MySQL に割り当てたメモリよりも多くのメモリを必要とする場合、[中断された接続] 警告がトリガーされます。

解決方法

Amazon RDS for MySQL で、中断された接続というエラーが表示された場合は、MySQL パラメータ値を必ず確認してください。問題の根本原因を特定したら、MySQL エラーログを監視しながら、パラメーターを更新して新しい値をテストします。

Amazon RDS で中断された接続エラーのトラブルシューティングを行う場合は、次のアプローチを検討してください。

  • Amazon RDS パラメータグループのデフォルト値を使用しているかどうかを確認します。接続タイムアウトに関連するパラメータのデフォルト値は、DB インスタンスに適していない場合があります。これらのパラメータの詳細については、「Amazon RDS for MySQL のパラメータを設定するためのベストプラクティス」の「接続タイムアウトに関連するパラメータ」セクションを参照してください。
  • connect_timeout に大きい値を設定すると、中断された接続エラーメッセージの発生を減らすのに役立つかどうかを確認できます。このパラメータには、MySQL サーバーインスタンスが不正なハンドシェイクで応答するまで待機する時間 (秒単位) を指定します。
  • interactive_timeout wait_timeout を変更します。接続プーリング (Java など) を使用するアプリケーションには、接続プールの設定に一致するタイムアウトが必要です。
  • インスタンスが大きなクエリを処理する必要がある場合は、max_allowed_packet の値を増やします。ローにクライアントの max_allowed_packet 値よりも多くのデータがある場合、エラーが報告されます。大きな BLOB 列または長い文字列を使用している場合は、この値を増やします。詳細については、「Amazon RDS for MySQL のパラメータを設定するためのベストプラクティス」の max_allowed_packet セクションを参照してください。
  • Amazon RDS for MySQL 接続が適切に閉じられていることを確認します。データベースを終了する前に、クライアントアプリケーションから mysql_close () 関数を呼び出してください。

トラブルシューティングのヒント

それでも中断された接続エラーメッセージが表示される場合は、次のトラブルシューティングのヒントをお試しください。

  • Performance Insights を有効にして、警告を引き起こしている SQL ステートメントの時間枠を取得します。
  • クライアントを実行しているマシンから tcpdump コマンドを実行して、サンプルパケットキャプチャをテストします。以下はその例です。
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?