ホームページ制作 オフィスオバタ

mysql server has gone away に対処

 ホームページのプログラム改修を行う場合、実機に影響を与えないために、テスト環境で同じ環境を作り、テスト環境側で修正を行います。
改修が完了したら、実機に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を再起動し、再度インポートを実行してみました。

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

モバイルバージョンを終了