レンタルサーバーの 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
SNS開発18年で2つのSNSを開発・運用中の当社が、あなたのアイデアを形にするお手伝いをします。