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

このエラーの最も一般的な原因は、サーバーがタイムアウトして接続が終了するためです。この場合、通常は次のいずれかのエラーコードが表示されます。

エラーコード

説明

CR_SERVER_GONE_ERROR

クライアントはサーバーに問い合わせを送信できませんでした。

CR_SERVER_LOST

クライアントはサーバーへの書き込み中にエラーを受信しませんでしたが、問い合わせに対する完全な回答を (または何の回答も) 入手できませんでした。

このエラーの原因となりうる以下の点と、その解決方法を確認してください。

  • このエラーは、接続が長時間アイドル状態にあり、正常にクライアントから終了されなかった場合に発生することがあります。この場合は、アプリケーションのタイムアウトが MySQL のタイムアウトよりも短いことを確認し、アプリケーションでアイドル接続を終了するようにしてください。
  • あまりスマートではありませんが手早い修正方法としては、カスタムパラメータグループを使用して「wait_timeout」パラメーターおよび「interactive_timeout」パラメーターを増加させることで、MySQL のタイムアウトを延ばすこともできます。
  • エラーが発生するクエリが大規模データセットを取得するものである場合は、カスタムパラメータグループを使用して「max_allowed_packet」サイズパラメーターを大きくする必要がある場合があります。
  • このエラーが大規模データセットを返す際にのみ発生する場合は、クライアントが 9001 という大きな MTU の値を使用している場合があります。この場合は、クライアントの TCP/IP MTU 値を小さくすることをお勧めします。クライアント MTU 値の変更方法については、インスタンスの MTU の設定を参照してください。MTU および Jumbo フレームの詳細については、EC2 インスタンスの最大ネットワーク送信単位 (MTU) を参照してください。
  • すべての「init_connect」パラメーターが正常に処理されていることを確認してください。これらのパラメーターが一部でも処理できない値に設定されていると、関連するクライアントの接続が失敗する場合があります。ユーザーに「init_connect」パラメーターとして参照される手順に対する EXECUTE 権限があることを確認してください。たとえば、ブログ投稿 Changing MySQL timezone on Amazon RDS に説明されているタイムゾーン手順の回避策を実装する場合に、説明されている手順の EXECUTE 権限がユーザーにないと、関連する「init_connect」パラメーターが処理されず、そのユーザーからの接続が失敗します。
  • この問題が発生するときに他の接続が機能していることを確認してください。すべての接続が同時に落ちる場合は、接続の問題ではないと考えられます。この場合は、Amazon RDS イベントを表示してMySQL エラーログを確認し、MySQL DB インスタンスにクラッシュまたは障害が発生していないことを確認してください。
  • MySQL ドキュメント B.5.2.9 MySQL server has gone away で、この問題の他の原因および解決策を確認してください。

RDS、MySQL、接続が失われた、タイムアウト、CR_SERVER_GONE_ERROR、CR_SERVER_LOST、DB インスタンス、パラメータグループ


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2015 年 11 月 23 日