MySQL

【MySQL】ERROR 2013 (HY000): Lost connection to MySQL server during query

MySQLで「ERROR 2013 (HY000): Lost connection to MySQL server during query」のエラーが発生しました。

その時いろいろ試行錯誤してエラーを解消させたメモです。原因は人それぞれなので、その参考になれば幸いです。

 

発生した経緯

テスト環境用のデータベースを再構築するため、データを本番の環境からコピーしようとmysqldumpで2400万件程度のダンプを取った後、テスト環境にインポートした時にエラーが発生しました。

 

原因の調査

さまざまさ原因が考えらますが、

  • 今回は一つのSQL文が長すぎるから?
  • ダンプのデータ量が多すぎてタイムアウトしている?
  • max_allowed_packetの設定値より大きいパケットを受け取った場合はPacket too largeエラーで接続がクローズされた?
    • ⇒クライアントの中には通信パケットが大きいとLost connection to MySQL server during query エラーが発生する

検証:MySQLの設定を変更してみる

とりあえずMySQLの設定値を変更して、トライ&エラーで検証してみました。

下記クエリでタイムアウトの設定を確認

show variables like '%timeout%';

設定変更方法としてmy.confを修正し再起動する方法と、set globalクエリを上げる2つがある。

※クエリ方法はそのセッション内のみ適応されるので注意。

色々設定を変えて試してみた!!

  • 「max_connections=150」にしてみるmax_connectionsとは「MySQLサーバが許可する、MySQLクライアントの同時接続最大数」
      ⇒ 効果なし
  • tmp_table_size = 1024M、sort_buffer_size=1024M」にしてみる
     ⇒ 効果なし
  • 「max_heap_table_size=1024M、tmp_table_size=2048M、sort_buffer_size=2048M」にしてみる
     ⇒ 効果なし
  • 「max_allowed_packet=512M」にしてみる
     ⇒ 効果なし
  • 「max_allowed_packet=10124M」にしてみる
     ⇒ 効果なし
  • 「read_rnd_buffer_size=1024M」にしてみる
     ⇒ 効果なし
  • 「max_allowed_packet=3000M、max_heap_table_size=3000M、tmp_table_size=3000M、sort_buffer_size=3000M、read_rnd_buffer_size=3000M、max_connections=300」にしてみる
     ⇒ 効果なし
  • 「max_allowed_packet=512M」に戻して「mysql -u[user] -p [db_name] --max_allowed_packet=10124M < [file]」を実行
     ⇒ 効果なし

解決

検証しすぎて疲れてきた。(;><)

設定を変えて試してもなかなか解消されないので、別の視点で考えてみたらあっさり解消できました。!

原因はmysqlのデータ保存先のディレクトリの容量が100%だったこと。

結構盲点でAPサーバとDBサーバを別サーバに分けていたため、APサーバの状態しか見てなかった。これは恥ずかしいぃ。(/ω\)

その中でクエリログ(querities.log)が96GBもあったため、削除して再実行したら普通に取り込めた!やったぁ!(*´▽`*)

-MySQL