Google 検索結果上位で解決できない問題の解決方法

レンタルサーバーの phpMyAdmin がタイムアウトして MySQL has gone away が表示された場合の対処方法(PHP – exec)

レンタルサーバーの phpMyAdmin インポート時の MySQL has gone away 対処方法(PHP - exec)

レンタルサーバーの phpMyAdmin へインポートしようとしてタイムアウトが発生し MySQL has gone away が発生した場合には my.ini / my.cnf などの変更ができません。
この場合の対処方法をご説明いたします。

※参考サイトは最下部にまとめております。

原因はタイムアウト?

原因はインポートするファイルが大きいことによるタイムアウトである…と予想されます。

phpMyAdmin – [インポート] … 失敗

phpMyAdmin の [インポート] タブを開いて ○アップロードファイル からファイルを選択してアップロード を試しそうとしても…ここからの処理はアップロードするだけでも時間がかかり、、タイムアウトの可能性が高くなってしまいます、、

アップロードディレクトリへのアップロード … 不可

○ウェブサーバ上のアップロードディレクトリ /hoge/fuga/phpMyAdmin/upload/ から選択する ディレクトリへ予めアップロードしておいてインポートする…という選択肢もありそうですが、レンタルサーバーの場合にはこのディレクトリへのアクセスも禁止されていたりします。。

解決方法

1. FTP 接続先へアップロード

FTP クライアントソフトを使って、Web サーバーへ事前にデータベースファイル “hogehoge.sql” をアップロードしておきます。

2. PHP からインポート

PHP で以下のプログラムを書いて “hogehoge.sql” をアップロードした Web サーバーのディレクトリへアップロードします。

<?php

	define("HOST_NAME", "********");//MySQL サーバーホスト名
	define("USER_NAME", "********");//MySQL ユーザー名
	define("MYSQL_PASSWORD", "********");//MySQL パスワード
	define("MYSQL_DBNAME", "********");//MySQL データベース名
	define("SQL_FILE_NAME", "hogehoge.sql");//MySQL インポートファイル名

	$strCommand = "mysql -h " . HOST_NAME . " -u " . USER_NAME . " -p " . MYSQL_PASSWORD . " " . MYSQL_DBNAME . " < " . SQL_FILE_NAME . ";
	exec($strCommand, $aryOutput = array(), $intWorked);
	switch($intWorked){
	case 0:
			echo "success!";
			break;
	default:
			echo "error!";
			break;
	}
?>

3. ブラウザから呼び出す

上記の *.php をブラウザから呼び出せば…概ねインポートは正常終了します。

4. エラーになる場合

ファイルサイズが大き過ぎて、やはりエラーになってしまう場合… “hogehoge.sql” を “hogehoge_1.sql”, “hogehoge_2.sql” … など、いくつかに分割して(SQL 文の区切り目で分割します)上記手順で順にアップロードしていけば、インポート作業は完了すると思います(僕はそのようにして完了しました)。

【補足】事前にファイルを分割して phpMyAdmin – [インポート] からインポートすれば良いのでは?!と思われるかもしれませんが…原因はわかりませんが、どんなにファイルを小さく分割しても 途中のファイルでエラーが発生してしまって 結局うまくいきませんでした、、(それで上記の方法にたどり着きました、、)

解決できましたら幸いです。

参考サイト

MySQL サーバーへの接続
https://dev.mysql.com/doc/refman/5.6/ja/connecting.html

COMMENT

メールアドレスが公開されることはありません。