スキップしてコンテンツを表示

Amazon RDS for MySQL または Aurora MySQL 互換で発生する、「Got an error reading communication packets」エラーの解決方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for MySQL または Amazon Aurora MySQL 互換エディションの DB インスタンスを使用しています。"通信パケットの読み取り時にエラーが発生しました" というエラーが表示されました。

簡単な説明

「[Warning] Aborted connection abc to db: 'database name' user: 'user name' host: 'host IP' (Got an error reading communication packets)」というエラーメッセージが表示される場合。

上記のエラーメッセージは、パラメータ値 aborted_clients または aborted_connects が増加すると表示されます。クライアントが強制終了時に接続を閉じなかったり、接続をドロップしたりしなかった場合、Amazon RDS はその接続をキャンセルし、aborted_clients パラメータの値を増加させます。aborted_connects パラメータの値は、クライアントが MySQL サーバーに接続できなかった場合に増加します。

**log_error_verbosity ** の値が 2 を超えると、エラーメッセージも表示されます。log_error_verbosity パラメータでは、エラーログの対象となるイベントを管理するための冗長性を指定します。詳細については、MySQL のウェブサイトで「通信エラーと接続の中断」を参照してください。

次の原因で、「Got an error reading communication packets」というエラーメッセージが表示される場合があります。

  • クライアントまたはドライバーに互換性がない。
  • ファイアウォールまたはプロキシにより、アイドル状態の接続が閉じられたり、接続がブロックされたりした。
  • クライアントとサーバー間の接続が不適切に閉じられたことが原因で、RDS for MySQL 内でスリープ接続数が増加した。
  • クライアントアプリケーションが接続を不適切に終了させた。
    注: MySQL は、長時間実行中のアイドル接続を強制的に閉じます。
  • アイドル接続数が wait_timeout または interactive_timeout のしきい値を超えている。
  • 接続パケットの取得時に、クライアント接続が connect_timeout 秒のしきい値を超えている。
  • net_write_timeoutnet_read_timeout などのパラメータの値が不十分である。
  • max_allowed_packet パラメータの値を超過している。
    注: この問題は、値が小さすぎるか、クエリが Amazon RDS for MySQL に割り当てられるメモリよりも多くのメモリを必要とする場合に発生します。

解決策

タイムアウトパラメータを変更する

問題の原因を特定するには、接続のタイムアウトに関連するパラメータを確認します。パラメータグループのデフォルト値を使用している場合は、DB インスタンスのデフォルト接続タイムアウト値を変更してください。

接続パラメータを変更するには、次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [パラメータグループ] を選択します。
  3. 使用する DB インスタンスのパラメータグループを選択します。
  4. [編集] を選択します。
  5. 接続タイムアウトパラメータを検索し、値を変更します。
    注: 値を変更した後、新しい値をテストする際に MySQL エラーログを監視してください。

connect_timeout

connect\ _timeout の値を増やし、その値で問題の発生を軽減できるかどうかをテストします。connect_timeout パラメータでは、DB インスタンスが bad handshake の応答を返すまでに MySQL Server DB インスタンスが待機する必要がある秒数を定義します。詳細については、MySQL のウェブサイトで connect_timeout を参照してください。

interactive_timeout および wait_timeout

interactive_timeout および wait_timeout も変更します。これらのパラメータの詳細については、MySQL のウェブサイトで wait_timeout または interactive_timeout について参照してください。接続プール機能を使用するアプリケーション (例: Java) には、接続プールの設定と一致するタイムアウトが必要です。

max_allowed_packet

インスタンスが大規模なクエリ、大規模な Binary Large Object (BLOB) 列、長い文字列を管理する必要がある場合は、max_allowed_packet の値を増やします。行のデータ量が _allowed_packet の最大値を超えた場合、エラーが発生します。詳細については、MySQL のウェブサイトで max_allowed_packet を参照してください。

net_write_timeout および net_read_timeout

net_write_timeout および net_read_timeout の値を増やします。net_write_timeoutnet_read_timeout は、wait_timeout と同じ値に設定します。詳細については、MySQL のウェブサイトで net_write_timeoutnet_read_timeout を参照してください。

Amazon RDS for MySQL または Amazon RDS for MySQL 互換の接続を適切に閉じるために、クライアントから mysql_close() を呼び出してください。

他のトラブルシューティング方法を実施する

エラーメッセージ「Got an error reading communications packets」が解消されない場合は、次の手順を実行します。

  • Performance Insights を有効化し、問題が発生した SQL ステートメントの期間を取得します。Aurora MySQL 互換については、「Aurora で Performance Insights の有効化と無効化を切り替える」を参照してください。
    重要: 2025 年 11 月 30 日に Performance Insights のサポートは終了します。2025 年 11 月 30 日までに、Database Insights の Advanced モードにアップグレードしてください。アップグレードしない場合、Performance Insights を使用する DB クラスターは、デフォルトで Database Insights の Standard モードを使用します。実行計画とオンデマンド分析は、Database Insights の Advanced モードでのみサポートされます。クラスターがデフォルト設定により Standard モードを使用する場合、コンソールでこれらの機能を使用できない可能性があります。Advanced モードの有効化については、「Amazon RDS で Database Insights の Advanced モードを有効にする」および「Amazon Aurora で Database Insights の Advanced モードを有効にする」を参照してください。
  • Amazon RDS または Aurora MySQL 互換 DB インスタンスでスロークエリログを有効にすると、long_query_time 値よりも長く実行されるクエリをログに記録できます。
    注: long_query_time のデフォルト値は 10 秒です。
  • Amazon Virtual Private Cloud (Amazon VPC) のフローログを有効化し、サーバーやクライアントが接続を閉じたかどうかを確認します。
  • アプリケーションが MySQL からの接続を正常に閉じたことを確認します。
  • クライアントを実行しているマシンから次の tcpdump コマンドを実行し、サンプルのパケットキャプチャをテストします。
    sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

関連情報

Amazon RDS DB インスタンスで DB への接続がドロップされた原因を教えてください

Aurora Serverless DB クラスターのログを閲覧、ダウンロードする方法を教えてください

コメントはありません

関連するコンテンツ