WEB で公開しているWordPress のデータベースをバックアップして、
検証用のローカルWordPress 上にレストアする際、データベースのインポートが失敗する。
ファイルサイズが大きい事が原因と思われる。
スクリプトがタイムアウトしました。
完了させたいのであれば同じファイルを再送信すればインポートが再開されます。
Contents
スクリプトがタイムアウトしました について
同じファイルを再送信してもインポートが再開されない。
メッセージを鵜呑みにして同じファイルを再度インポートしたところ、さらにエラーで追撃されます。
こんな感じ。
バックアップファイルのサイズが97M 程度あったので、処理に時間がかかるのかな? と思い、
容量が大きめなPOST のテーブルとそれ以外のテーブルで2つに分割してエクスポートし、
それからインポートしてみましたが、結果は変わりませんでした。
メモリの問題らしい ?
ググってみたら、「php.ini」を編集してメモリの上限設定を「128M」にすると良いと書いてあったので、早速確認。
しかし既に、128M (インポートするファイルサイズ以上の値なので、多分問題ないレベルの値)が割り当てられていました。
max_execution_time
その他のリミット設定を探してみたところ、「max_execution_time」が怪しい。
という事で、10倍にしてみました。
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
;max_execution_time = 30
max_execution_time = 300 ← 変更後
アパッチ再起動。
ブラウザキャッシュクリア。
ダメでした。orz
この後しばらくハマって、やっと分かったのですが、
これが良いところを突いていました。
ハマった内容については割愛しますが、2ページ目に「ハマり道」としてまとめておきます。
実は「phpMyAdmin 」も同じ設定値を持っていた
php.ini の「max_execution_time」同様の設定が、phpMyAdmin にもありました。
「$cfg[‘ExecTimeLimit’] 」と言う設定値で、デフォルト値が「300」。
この値を大きくすると、エラー回避できるという記事をハマり道の果てに見つけました。
「タイムアウトしました」が見ているパラメータを修正する
phpMyAdmin 側で「$cfg[‘ExecTimeLimit’] 」と言う設定値を持っていて、
タイムアウトしました・・・のエラーはこの値を見ています。
$cfg[‘ExecTimeLimit’] の修正方法について。
phpMyAdmin の場合、「config.default.php」にデフォルトの設定値が定義されているようですが、
そのデフォルト値を変更したい場合は、「config.inc.php」に書き込むのが作法の様です。
ファイル名の「inc」はきっと増分って事でしょうね。
つまり、「$cfg[‘ExecTimeLimit’] 」を変更しようと思ったら、
- config.default.php から変更したい設定のフレーズをコピー
- config.inc.php ファイルに貼り付け
- 変更したい値に変更する。
という流れになります。
実際に $cfg[‘ExecTimeLimit’] の値を変更する。
config.default.php をテキストエディタ開いて、
$cfg[‘ExecTimeLimit’] の設定フレーズを(クリップボードに)コピーする。
デフォルト設定はphpMyAdmin インストールフォルダからもう一階層下の
<phpMyAdmin インストールフォルダ>\libraries\config.default.php
で定義されています。
エディタで config.default.php を開くとこんな感じです。
素敵なアスキーアートがいきなり牙を剥いて来ます。
config.default.php から下記のフレーズをコピーする。
/**
* maximum execution time in seconds (0 for no limit)
*
* @global integer $cfg['ExecTimeLimit']
*/
$cfg['ExecTimeLimit'] = 300;
config.inc.php ファイルへ貼り付けて値を変更。
※config.inc.php ファイルがない場合は、config.sample.inc.php をリネームして使う。でいいと思います。
ファイルの場所はconfig.default.php から1階層上がったここ。
<phpMyAdmin インストールフォルダ>\config.inc.php
コピーしたフレーズを適当なところに貼りつけたら、値を変更します。
「1800」に設定しました。
/**
* maximum execution time in seconds (0 for no limit)
*
* @global integer $cfg['ExecTimeLimit']
*/
//$cfg['ExecTimeLimit'] = 300;
$cfg['ExecTimeLimit'] = 1800; ← 変更。
こんな感じ。
注意。
設定値に変な値を入れると、phpMyadmin のGUI が固まるので注意。
全角スペースとかも注意。
「0s」 ってなんや^^;
正しくは「0」です。この些細なミスの為、30 分ほどphpMyAdmin が操作できませんでした。
後は、Apache を再起動して、ブラウザキャッシュをクリアしてから、
エラーが出る97 MB 近いサイズのデータをインポート。
正常に終了しました。
余談
メモリの設定も増やしておこうと思いましたが、
こちらは「無限」に設定されているようなので、このままにしておきます。
/**
* maximum allocated bytes ('-1' for no limit, '0' for no change)
* this is a string because '16M' is a valid value; we must put here
* a string as the default value so that /setup accepts strings
*
* @global string $cfg['MemoryLimit']
*/
$cfg['MemoryLimit'] = '-1';
エラーコード200
インポートデータが大きいと、そもそものセッションタイムアウトの問題が発生します。
こっちはエラーメッセージを閉じたあと、ログインを促されるので、マジでタイムアウトしているっぽいです。
セッション・タイムアウト対策
phpMyAdmin エラーコード200 で停止してしまう。
【phpMyAdmin】タイムアウト時間を設定する(長くする、短くする)
/**
* validity of cookie login (in seconds; 1440 matches php.ini's
* session.gc_maxlifetime)
*
* @global integer $cfg['LoginCookieValidity']
*/
$cfg['LoginCookieValidity'] = 1440;
競合する設定について。
2つの設定値の関係が気になるので、検証。
2か所設定しないといけないのか?
php.ini 無視されている説
php.ini で「max_execution_time」の値をデフォルトの「30」に戻します。
これでインポート出来たら、php.ini は変更しなくてもOK って事ですね。
インポート完了しました。
念のためにphpinfo( ) で設定を確認。
値は「30」で設定どおりに反映されていました。
という事は「max_execution_time = 30」 でインポートが完了しています。
まとめ
インポートのファイルサイズが大きいと、クエリの実行時間が伸びて「タイムアウトエラー」が発生します。
時間制限を増やすには、phpMyAdmin の設定ファイル「config.inc.php」にて、
「$cfg[‘ExecTimeLimit’]」の値を変更します。
2ページ以降に、特に見る必要がない、「ハマった過程など」をまとめました。
一応、ブログのテーマが「ログ」なので。
ピンバック: WEB で公開中のWordPress サイトをローカル環境で再構築する。 - .zapping
ピンバック: レンタルサーバー上のWordPress サイトをオンプレミス・サーバーで再構築する時の各種コンフィグ設定 – .zapping
ピンバック: ロリポップサーバーからConoHa WING へWordPress の移設がうまくいかない。 - .zapping