【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もあったため、削除して再実行したら普通に取り込めた!やったぁ!

(*´▽`*)



投稿日:2020-02-28    更新日:2020-03-02

[スポンサーリンク]

  
サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]

最近の記事