PHP から MySQL に接続していて以下のエラーが出た、原因がつかめなくて詰まったが。解決したのでメモ。
Warning: mysql_query(): MySQL server has gone away
Warning: mysql_query(): Error reading result set's header
調べてみるとメモリ不足とのことで、max_allowed_packet の値を 32Mb などにしたが解決せず。原因は別にあるようだ。
とりあえず接続を行っている箇所の手前で、
ping を送ってサーバとの接続をチェックするとよい。
if ($mysqli->ping()) {
printf ("Our connection is ok!\n");
} else {
printf ("Error: %s\n", $mysqli->error);
}
自分の場合、MySQL の接続とクエリ実行箇所の間に、関係のなの処理を挟んだせいで接続がタイムアウトしていた。
なのでタイムアウトの時間を長くとるか。
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
もしくはクエリ実行の直前に接続を行うようにすることで、この問題は解決します。