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_timeout や net_read_timeout などのパラメータの値が不十分である。
- max_allowed_packet パラメータの値を超過している。
注: この問題は、値が小さすぎるか、クエリが Amazon RDS for MySQL に割り当てられるメモリよりも多くのメモリを必要とする場合に発生します。
解決策
タイムアウトパラメータを変更する
問題の原因を特定するには、接続のタイムアウトに関連するパラメータを確認します。パラメータグループのデフォルト値を使用している場合は、DB インスタンスのデフォルト接続タイムアウト値を変更してください。
接続パラメータを変更するには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [パラメータグループ] を選択します。
- 使用する DB インスタンスのパラメータグループを選択します。
- [編集] を選択します。
- 接続タイムアウトパラメータを検索し、値を変更します。
注: 値を変更した後、新しい値をテストする際に 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_timeout と net_read_timeout は、wait_timeout と同じ値に設定します。詳細については、MySQL のウェブサイトで net_write_timeout とnet_read_timeout を参照してください。
Amazon RDS for MySQL または Amazon RDS for MySQL 互換の接続を適切に閉じるために、クライアントから mysql_close() を呼び出してください。
他のトラブルシューティング方法を実施する
エラーメッセージ「Got an error reading communications packets」が解消されない場合は、次の手順を実行します。
関連情報
Amazon RDS DB インスタンスで DB への接続がドロップされた原因を教えてください
Aurora Serverless DB クラスターのログを閲覧、ダウンロードする方法を教えてください