XAMPPでphpMyAdminを使用して大きな.sqlデータファイルをインポートしようとしています。しかし、これには多くの時間がかかり、私は取得し続けます:
致命的なエラー:行285のC:\ xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.phpで最大実行時間が300秒を超えています
また、ファイルの長さは約120万行です。
ファイルのサイズは約30MBなので、それほど大きくありません。なぜそんなに時間がかかっているのか本当に分かりません。
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
; 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=30000
; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time=60
; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=200M
これは、xamppのphp.iniの構成ファイルです。何らかの理由でまだ取得できます
致命的なエラー:行285のC:\ xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.phpで最大実行時間が300秒を超えています。
PhpMyAdminディレクトリ内には、libraries\config.default.php
という名前の$cfg['ExecTimeLimit']
という設定変数があり、必要な最大実行時間に設定できます。
さて、これを取り除くには、phpMyadmin変数を0に設定する必要があります。これは無制限であるか、ニーズに適した秒単位の値です。または、常にCLI(コマンドラインインターフェイス)を使用して、そのようなエラーを取得することさえできません( this link を参照してください)。
ここでのエラーについては、最初に安全な側でPHPパラメータを適切に設定して、大きなファイルをアップロードし、その時点からの最大実行時間を使用できるようにしてください。 php.iniファイルの3つのパラメーターを以下に設定します。
それが完了したら、「config.default.php」のような名前のphpMyadmin構成ファイルの検索に戻ります。 XAMPPでは、「C:\ xampp\phpMyAdmin\libraries」フォルダーの下にあります。 config.default.php
というファイルを開いて設定します:
$cfg['ExecTimeLimit'] = 0;
設定したら、MySQLとApacheを再起動し、データベースをインポートします。
楽しい... :)
Webインターフェイスを介して巨大なデータセットをインポートしようとしています。
デフォルトでは、PHP Webサーバーのコンテキストで実行されるスクリプトは、単一のエラーPHPサーバー全体とサービス拒否を引き起こします。
そのため、インポートは失敗します。 PHPMyAdminはWebアプリケーションであり、PHPによって課せられる制限に達しています。
制限を引き上げてみることもできますが、その制限は正当な理由で存在するため、お勧めできません。 Webサーバーで実行するのに非常に長い時間がかかるスクリプトを実行することは、非常に悪い考えです。
PHPMyAdminは、実際にはこのようなヘビーデューティーの仕事を目的としておらず、日々のハウスキーピングタスクとトラブルシューティングを目的としています。
最良のオプションは、mysqlコマンドラインツールなど、ジョブに適切なツールを使用することです。ファイルがSQLダンプであると仮定すると、コマンドラインから次を実行してみることができます。
mysql -u(your user name here) -p(your password here) -h(your sql server name here) (db name here) < /path/to/your/sql/dump.sql
または、コマンドラインツールに慣れていない場合は、SQLYog(Windowsの場合)、Sequel Pro(Macの場合)などがインポートジョブの実行に適している場合があります。
これは私のために働いた。 DBIMysqli.class.php
ファイルで最大実行時間300を超えた場合。テキストエディターで次のファイルを開きますC:\xampp\phpMyAdmin\libraries\config.default.php
、次のコード行を検索します。
$cfg[‘ExecTimeLimit’] = 300;
値300
を900
に変更します。
$ cfg ['ExecTimeLimit'] = 0に設定するだけです; xampp/phpMyAdmin/libraries/config.default.phpにあります。
秒単位の最大実行時間(制限なしの場合は0)。
そして、php.ini
ファイルサイズごとのファイル。
post_max_size = 600M
upload_max_filesize = 500M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 600M
ただし、「post_max_size」と「memory_limit」がupload_max_filesizeよりも大きいことを確認してください。
**注-サーバーを再起動することを忘れないでください。
.sqlファイルですか、それとも圧縮されていますか(.Zip、.gzなど)?圧縮形式では、より多くのPHPリソースが必要になるため、アップロードする前に圧縮を解除してみてください。
ただし、他にも試すことができる方法があります。コマンドラインアクセスがある場合は、ファイルをアップロードし、コマンドラインクライアントmysql
でインポートします(mysql>
促す、 use databasename;
その後source file.sql
)。
それ以外の場合は、phpMyAdminの「UploadDir」機能を使用してファイルをサーバーに配置し、ローカルマシンからアップロードすることなくphpMyAdmin内に表示できます。
変更する必要がありますphp_admin_value max_execution_time
エイリアス設定で(\XAMPP\alias\phpmyadmin.conf)
答えはここにあります: WAMPServer phpMyadmin 360秒の最大実行時間を超えました
成功せずに多くのことを試みた後、サーバーへのSSHアクセスを取得し、phpMyAdminの代わりにコマンドラインで80Mbデータベースをインポートしました。コマンドは次のとおりです。
mysql -u root -p -D mydatabase -o < mydatabase.sql
Windowsでxammpを実行している場合、mysql.exeのパスはC:\xampp\mysql\bin\mysql.exe
$cfg[‘ExecTimeLimit’] = 0;
は、上記で推奨されているようにconfig.inc.phpで無限の実行を意味するように設定できます。これは「通常の」iniファイルではないことに注意してください。そのphpスクリプトなので、そのファイルの先頭に<?php
を開く必要があります。サーバー上にインポートを処理する他のツールがあります。
a)Pleskのようなサーバー管理システムがある場合は、そこにあるデータベースインポートツールを使用します。
b)sshコマンドを使用してデータベースダンプを作成するか、sshを介してmysqlにデータベースを直接書き込みます。以下のコマンド。
データベースダンプを作成します。
mysqldump DBname --add-drop-table -h DBhostname -u DBusername -pPASSWORD > databasefile.sql
データベースをmysqlに書き込みます。
mysql -h rdbms -u DBusername -pPASSWORD DBname < databasefile.sql