頑張らない!でも諦めない!必死にならずにええかげん

(phpMyAdmin)タイムアウト設定の動作と確認

      2014/11/22

phpMyAdminの設定によって、
タイムアウトが発生するケースはそうあるものではありません。
しかし、システム全体(Apache、PHP、MySQLなど)のタイムアウト設定と、
phpMyAdminのタイムアウト設定を比較したとき、
phpMyAdminのタイムアウトを意図的に短く設定することでメリットが生まれす。

はじめに

サーバーのタイムアウトエラーといえば
500:Internal Server Errorではないでしょうか。本当に見たくない表示です。

一過性で表示されるものもあれば、毎回同じ操作で表示される場合もあって、
原因の特定が非常に面倒なエラーです。

こうしたサーバーエラーがシステム内の各種タイムアウト設定などに起因しているのか、
それとも他の原因があるのかなどをしっかり調べて対応をしないと、
不用意にサーバーの設定を変更して、無用なリスクを招いてしまいます。

phpMyAdminによるタイムアウト設定と、
実際にタイムアウトが発生した場合の動作をご紹介します。

phpmyAdmin設定による制限値

phpMyAdminによってエラーが表示されるパターンはそう出逢わないかもしれません。
通常、phpMyAdminをインストールし初期設定のまま利用している場合には、
300秒(5分)でタイムアウトが発生するようになっています。

おそらくはその他の設定が優先され、5分に到達していないのが通常ではないかと思います。

phpMyAdmin設定の初期値

phpMyAdminによる設定値の初期値は、
phpMyAdminのディレクトリ内にある[libraries/config.default.php]内に定義されています。

このファイルを開くとファイルの上部には、アスキーアートでデカデカと、
「NO!! DO NOT EDIT!!」と表示されています。

このファイルを直接編集することはセオリーではないことを示しています。
ちなみに、phpMyAdminに設定されている値で実行タイムアウトを制御している値は、
config.default.phpに以下のように設定されています。

$cfg[‘ExecTimeLimit’] = 300;

phpMyAdmin設定の変更

phpMyAdminでデフォルトの設定を上書きしたい場合には、
phpMyAdminをインストールしたディレクトリの[config.inc.php]を編集します。

今回のタイムアウト設定を変更する場合には、以下のような行を追加します。

(注意)
PHPコードの[?>]より前に追記します。

ここでは、タイムアウト時間を20秒に変更しています。
(通常は値を増やすこととは思いますが、適宜サーバー負荷に合わせて調整ください)

phpMyAdminによるタイムアウト発生時の各表示は以下のようになります。

エクスポート時

エクスポートではタイムアウトが発生した場合でも、画面上には特にメッセージなどは表示されません。
これが怖いところではあるのですが、
ダウンロードしたSQLファイルが中断していることを確認するしかありません。

尚、エクスポートしたSQLファイルの最後には、以下のようなメッセージが出力されます。

インポート時

インポートではタイムアウトが発生した場合に、レジュームする機能があるのはご存じのことでしょう。

中断して再開を行う設定については[インポート]内で表示される[部分インポート]にて行えます。

制限時間が近くなったときにスクリプト側でインポートを中断できるようにします。
(大きなファイルをインポートする場合には便利ですが、トランザクションが壊れることもあります。)

01_phpMyAdminの部分インポート設定

phpMyAdminの部分インポート設定

この部分にチェックを付与することでインポート中断が有効になります。
この中断を行うか否かの判断は、phpMyAdminによるタイムアウト設定時間によって動作します。

上記の設定で20秒として処理を行なった場合で20秒を超過すると判断された場合には、
以下のように画面に表示が行われます。

スクリプトがタイムアウトしました。
インポートを完了させたいのであれば同じファイルを再送信すればインポートが再開されます。

02_部分インポートのタイムアウト時

部分インポートのタイムアウト時

ブラウザの表示をそのままの状態で、同じファイルを再度指定し[実行する]をクリックすることで、
前回の中断位置から再度インポートが行われます。
再開処理から再びタイムアウトになる場合には、再度同じメッセージが表示されます。

レジューム(再開処理)自体の安定性については完全ではないとは思いますが、
私の場合、25万行のデータを3回に分けてインポートした際にも、
最終的には25万行のレコードとしてデータがインポートされました。
ただし、最後のインポートでは以下のようなメッセージが表示されましたが、
処理自体は行われているという印象でした。

#1231 – Variable ‘character_set_client’ can’t be set to the value of ‘NULL’

03_再取込完了時に遭遇したエラー例

再取込完了時に遭遇したエラー例

また「制限時間が近くなったときにスクリプト側でインポートを中断できるようにします。」を無効な状態で、
インポートを行った際には、以下のようにエラーが画面に表示され中断されます。

Fatal error: Maximum execution time of 20 seconds exceeded in (フルパス)\pma\libraries\import\sql.php on line 210

04_部分インポートOFF時の表示

部分インポートOFF時の表示

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

このようにphpMyAdminの実行時タイムアウトの設定を、
サーバー内のその他のタイムアウトよりも小さく設定しておくことで、
インポートの際にインポート処理が中断されても、中断箇所から再取込が行えるようになります。

エクスポート時においてもサーバーのその他のタイムアウトで終了した場合よりも、
エクスポートファイル自体にタイムアウトが発生した事実が、
エラーメッセージとして残ることも識別ができるという意味ではメリットです。

事実、レンタルサーバーなどではApacheのログといった情報にアクセスすることができず、
エラーの原因が特定できない場合も多いものです。
特定できないようなエラーにあたるよりは、
エラーを自分で発生させるように設定しておき、
別の方策で回避する方が結果安定した運用ができるようになります。

Apache,Apache Hadoop,Apache Subversion,Hadoop,HDFS,HBase,Hive,Mahout,Pigは、
Apache Software Foundationの米国およびその他の国における登録商標または商標です。
PHPはPHP License (原文)に基づいて、
Open Source Initiativeに承認されライセンスされています。
ApacheソフトウェアはApache Software License (原文)および
Apache License, 2.0 (原文)に基づきOpen Source Initiativeに承認されライセンスされています。

MySQLはOracle Inc.による著作物です。
MySQLはFree Software Foundation, Inc.によってGPL Licenseでライセンスされています。

phpMyAdminはphpMyAdmin devel teamによる著作物です。
phpMyAdminはGNU General Public License, version 2.によってライセンスされています。

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。

AdMax Promotion

ブログ記事のご紹介
すべて展開 | すべて省略

Rakuten Promotion

ページ
すべて展開 | すべて省略

 - phpMyAdmin, WordPress ,

  関連記事