mysql server has gone away に対処

2020年2月27日

 ホームページのプログラム改修を行う場合、実機に影響を与えないために、テスト環境で同じ環境を作り、テスト環境側で修正を行います。
改修が完了したら、実機にUPするという流れです。

テスト環境起こしには、データベースのインポートを行いますが、今回インポート時にエラーが発生し、インポートできませんでした。

テスト環境にはXAMPPを使用し、インポートにはphpMyAdminを使用しています。

色々調べて試したら、うまくインポートできましたので、忘備録として記録します。

現象は、インポート時このようなエラーが発生しました。

一見SQLファイルの文法エラーのようにも見えますが、一番下に「#2006 – MySQL server has gone away」と表示されているのが気になりました。

いつもの如く原因をググりました。

 エラー番号や、エラーメッセージが表示されている場合は、原因を調べるのが早いです。エラーメッセージで検索すると、すぐに答えが出てきました。

「読み込むSQLの大きさが、設定されているパケットサイズを超えています」
というようなエラーでした。

どういうことかというと、SQL文の中の1文に、とてつもなく長いものが含まれているということです。

例えば、画像データなどをBLOBカラムに直接保存している場合などです。

原因がわかれば、あとは設定を直すだけです。

 インポート時のSQL文の1文のパケットサイズを増やす設定は、my.ini(またはmy.cnf)の設定を変更します。

レンタルサーバーの場合は、大抵変更できませんが、今回はXAMPPなので容易に変更ができます。

まず、XAMPPコントロールパネルから、MYSQLのConfigボタンを押し、my.iniを開きます。

max_allowed_packet を検索します。
デフォルトでは1Mが設定されていました。
今回は32Mを設定します。
XAMPPは自分のパソコンで動作するので、多少サイズを大きめにしても大丈夫です。ただ共有サーバーでは、サーバーのリソースを圧迫(サーバーに無理を強いて自滅させる)ことになるので、注意が必要です。

32Mに設定しました。
ついでに、エクスポート側のパケットサイズも変更します。

エクスポート側は、16Mが設定されていました。
インポートのデフォルト値1Mに比べると大きめの値が設定されていました。
インポートを32Mに設定したので、エクスポートも32Mに設定しておきます。

エクスポート側も32Mに設定しました。

my.iniファイルを上書き保存し、中途半端に読み込んだSQLデータを削除後、MySQLを再起動し、再度インポートを実行してみました。

無事、うまく読み込みできました。
為せば成るものです。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております

忘備録, MYSQL, PHP

Posted by OBATA