PowerCMS X ブログ
2025-12-23
大容量の SQL ダンプを MySQL にリストアする際、苦戦しました。
ログの重要性をあらためて再認識した話です。
SQL ファイルを mysql コマンドでリストアしていたところ、途中で以下のエラーが発生しました。
ERROR 2006 (HY000) at line 29669: MySQL server has gone away
一見すると「接続が切れた」ということしか分からず、何が原因なのか見当がつかない状態でした。
エラーメッセージをそのまま検索すると、次のような原因が挙げられていました。
どれも あり得そうではあるものの、「今回はどれが該当するのか」「どの対策を取るべきなのか」が分からず、1つずつ設定を見直していくかと考えていました。
MySQL 自身のログを見れば原因がわかりそうと思ったものの、普段、障害調査を行う際には PHP のエラーログや Apache(httpd) のログを確認することが多く、データベースに関連するログを確認した経験はありませんでした。
調べてみると my.cnf にログの出力先が記載されていることが分かり、実際に確認すると以下の設定がありました。
log-error=/var/log/mysqld.log
ログを確認すると、以下のエラーが出力されていました。
Got a packet bigger than 'max_allowed_packet' bytes
リストア中に送信された SQL が max_allowed_packet の上限を超えていたのだと分かりました。
SET GLOBAL max_allowed_packet = 1073741824; だと再起動時に元の設定に戻ってしまうため、恒久設定として my.cnf に追記することにしました。(再起動を避けたいが設定は変更したい場合、SET GLOBAL でもよいかもしれません)
[mysqld]max_allowed_packet=1024M
設定後、MySQL を再起動
systemctl restart mysqld
その後、再度リストアを実行したところ、エラーは発生せず、無事にリストアが完了しました。
ログの確認って大切だなとあらためて感じました。
カテゴリー:トラブルシューティング
投稿者:Matsuoka