Amazon RDS MySQL DB インスタンスへの接続時に発生する「MySQL server has gone away」エラーの解決方法を教えてください。

最終更新日: 2019 年 12 月 20 日

MySQL を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスにクエリを実行しようとしましたが、「MySQL server has gone away」または「Lost connection to server during query」というエラーメッセージが表示されました。

簡単な説明

サーバーがタイムアウトして接続を閉じた場合、次のいずれかのエラーが発生することがあります。

  • CR_SERVER_GONE_ERROR - クライアントは、サーバーに質問を送信できませんでした。
  • CR_SERVER_LOST - クライアントは、サーバーへの書き込み時にエラーを取得しませんでしたが、クライアントは質問に対する完全な回答 (または任意の回答) を取得できませんでした。

詳細については、MySQL server has gone away に関する MySQL ドキュメントを参照してください。

解決方法

これらのエラーについては、次の原因および関連する解決方法を確認してください。

  • 接続のアイドル状態が長すぎる場合、クライアントが誤って接続を終了する可能性があります。この問題を解決するには、アプリケーションのタイムアウトが MySQL のタイムアウトよりも短いことを確認し、アプリケーションがアイドル状態の接続を閉じることを確認します。
  • 接続がタイムアウトした場合は、カスタムパラメータグループを使用して wait_timeout パラメータと interactive_timeout パラメータを増やして、MySQL のタイムアウト時間を延長します。詳細については、「DB パラメータグループを使用する」をご参照ください。
  • エラーを生成しているクエリが大きなデータセットを取得している場合は、カスタムパラメータグループを使用して max_allowed_packet サイズパラメータを増やします。詳細については、「DB パラメータグループのパラメータの変更」をご参照ください。
  • 大きなデータセットを返すときにのみエラーが発生する場合、クライアントは大きな MTU 値 9001 を使用している可能性があります。この問題を解決するには、クライアントの TCP/IP MTU 値を減らします。クライアント MTU 値の変更については、「インスタンスの MTU の設定」をご参照ください。
  • init_connect パラメータが、パラメータの処理を許可しない値に設定されている場合、関連付けられたクライアント接続が失敗する可能性があります。すべての init_connect パラメータが正しく処理されていることを確認します。init_connect パラメータとして参照されるプロシージャに対して、ユーザーに EXECUTE のアクセス許可があることを確認します。
  • すべての接続が同時に切断されている場合は、この問題が発生したときに他の接続が引き続き動作していることを確認します。この問題を解決するには、Amazon RDS のイベントを表示して、MySQL エラーログを確認することによって、MySQL DB インスタンスがクラッシュ、またはフェイルオーバーしていないことを確かめます。