it-swarm.com.de

PHP: Maximale Ausführungszeit beim Importieren einer .SQL-Datendatei

Ich versuche, eine große .sql-Datendatei mit phpMyAdmin in XAMPP zu importieren. Dies nimmt jedoch viel Zeit in Anspruch und ich bekomme immer wieder:

Schwerwiegender Fehler: Die maximale Ausführungszeit von 300 Sekunden wurde in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php in Zeile 285 überschritten

Und die Datei ist ungefähr 1,2 Millionen Zeilen lang.

Die Datei ist etwa 30 MB groß, daher ist sie nicht so groß. Ich verstehe nicht wirklich, warum es so lange dauert.

;;;;;;;;;;;;;;;;;;;
; 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

Das ist die Konfigurationsdatei für php.ini in xampp, aus irgendeinem Grund bekomme ich immer noch 

Schwerwiegender Fehler: Die maximale Ausführungszeit von 300 Sekunden wurde in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php in Zeile 285 überschritten.

28
EssexPN

Es gibt eine Konfigurationsvariable innerhalb des phpMyAdmin-Verzeichnisses, die Sie in libraries\config.default.php mit dem Namen $cfg['ExecTimeLimit'] finden und auf die maximale Ausführungszeit einstellen können.

43
Randell

Um das loszuwerden, müssen Sie die phpMyadmin-Variable entweder auf 0 setzen, die unbegrenzt ist, oder den Wert in Sekunden, den Sie für Ihre Bedürfnisse geeignet finden. Oder Sie könnten immer CLI (Command Line Interface) verwenden, um nicht einmal solche Fehler zu erhalten (für die Sie einen Blick auf diesen Link werfen möchten.).

Nun zu dem Fehler hier: Stellen Sie zunächst sicher, dass Sie die Parameter PHP richtig eingestellt haben, damit Sie große Dateien hochladen können und die maximale Ausführungszeit von diesem Ende aus verwenden können. Wenn nicht, fahren Sie fort und stellen Sie drei Parameter aus der Datei php.ini ein.

  1. max_execution_time = 3000000 (Legen Sie dies gemäß Ihrer Anforderung fest)
  2. post_max_size = 4096M
  3. upload_max_filesize = 4096M

Sobald dies erledigt ist, finden Sie die phpMyadmin-Konfigurationsdatei mit dem Namen "config.default.php". Auf XAMPP finden Sie es unter "C:\xampp\phpMyAdmin\libraries". Öffnen Sie die Datei mit dem Namen config.default.php und legen Sie Folgendes fest:

$cfg['ExecTimeLimit'] = 0;

Starten Sie anschließend MySQL und Apache neu und importieren Sie Ihre Datenbank.

Genießen... :)

19
Umesh Patil

Sie versuchen, eine riesige Datenmenge über eine Webschnittstelle zu importieren. 

Standardmäßig haben PHP Skripts, die im Kontext eines Webservers ausgeführt werden, eine maximale Ausführungszeitbegrenzung, da nicht ein einzelnes fehlerhaftes PHP - Skript den gesamten Server binden und eine Denial-of-Service-Störung verursachen soll. 

Aus diesem Grund schlägt der Import fehl. PHPMyAdmin ist eine Webanwendung und erreicht die von PHP auferlegte Grenze. 

Sie können versuchen, das Limit zu erhöhen, aber dieses Limit existiert aus gutem Grund, daher ist dies nicht ratsam. Das Ausführen eines Skripts, dessen Ausführung auf einem Webserver sehr lange dauern wird, ist eine sehr schlechte Idee. 

PHPMyAdmin ist nicht wirklich für schwere Aufgaben wie diese gedacht, sondern für die täglichen Reinigungsaufgaben und die Fehlerbehebung. 

Die beste Option ist, die richtigen Tools für den Job zu verwenden, beispielsweise die Befehlszeilen-Tools von mysql. Angenommen, Ihre Datei ist ein SQL-Dump, dann können Sie versuchen, Folgendes über die Befehlszeile auszuführen:

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

Wenn Sie sich nicht mit Befehlszeilentools auskennen, können SQLYog (für Windows), Sequel Pro (für Mac) usw. für den Importauftrag besser geeignet sein

5
GordonM

Das hat für mich funktioniert. Wenn Sie die maximale Ausführungszeit von 300 in der DBIMysqli.class.php Datei überschritten haben. Öffnen Sie die folgende Datei im Texteditor C:\xampp\phpMyAdmin\libraries\config.default.php thensearch die folgende Codezeile:

$cfg[‘ExecTimeLimit’] = 300;

und ändern Sie den Wert 300 in 900.

https://surya2in1.wordpress.com/2015/07/28/fatal-error-maximum-execution-time-of-300-seconds-exceeded/

4
William

Setzen Sie einfach $ cfg ['ExecTimeLimit'] = 0; In xampp/phpMyAdmin/libraries/config.default.php.

Maximale Ausführungszeit in Sekunden (0 für keine Begrenzung).

Und machen Sie dies unter Änderungen in php.ini Datei nach Dateigröße.

post_max_size = 600M 
upload_max_filesize = 500M 
max_execution_time = 5000 
max_input_time = 5000 
memory_limit = 600M

Stellen Sie jedoch sicher, dass 'post_max_size' und 'memory_limit' mehr als upload_max_filesize sind.

** Hinweis - Vergessen Sie nicht, Ihren Server neu zu starten.

1
Tejas Damre

Handelt es sich um eine .sql-Datei oder ist sie komprimiert (.Zip, .gz usw.)? Komprimierte Formate erfordern manchmal mehr PHP -Ressourcen, sodass Sie versuchen könnten, sie vor dem Hochladen zu dekomprimieren.

Es gibt jedoch auch andere Methoden, die Sie ausprobieren können. Wenn Sie über die Befehlszeile verfügen, laden Sie einfach die Datei hoch und importieren Sie sie mit dem Befehlszeilenclient mysql (einmal an der mysql>-Eingabeaufforderung use databasename; und dann source file.sql).

Andernfalls können Sie die phpMyAdmin-Funktion "UploadDir" verwenden, um die Datei auf dem Server abzulegen und sie in phpMyAdmin anzeigen zu lassen, ohne sie auch von Ihrem lokalen Computer hochladen zu müssen.

Dieser Link enthält Informationen zur Verwendung von UploadDir und dieser enthält einige weitere Tipps und Methoden.

1
Isaac Bennetch

sie müssen php_admin_value max_execution_time in Ihrer Alias-Konfiguration (\XAMPP\alias\phpmyadmin.conf) ändern.

antwort ist hier: WAMPServer phpMyadmin Maximale Ausführungszeit von 360 Sekunden überschritten

1
mp.hamid

Nachdem ich viele Dinge ohne Erfolg versucht hatte, konnte ich SSH-Zugriff auf den Server erhalten und meine 80-MB-Datenbank mit einer Befehlszeile anstelle von phpMyAdmin importieren. Hier ist der Befehl:

mysql -u root -p -D mydatabase -o < mydatabase.sql

Es ist viel einfacher, große Datenbanken zu importieren. Wenn Sie xammp unter Windows ausführen, ist der Pfad für mysql.exe C:\xampp\mysql\bin\mysql.exe.

0
Toni Almeida
  1. Ändern Sie niemals die ursprüngliche Datei config.default.php.
  2. Das Ändern der allgemeinen Ausführungszeit in php.ini hat keine Auswirkungen auf phpmyadmin-Skripte.
  3. Verwenden Sie stattdessen eine neue config.inc.php oder die config.sample.inc.php aus dem Ordner/phpMyAdmin.
  4. Sie können $cfg[‘ExecTimeLimit’] = 0; bedeutet endlose Ausführung in der config.inc.php wie oben empfohlen. Beachten Sie, dass dies keine "normale" INI-Datei ist. Es ist ein PHP-Skript, also brauchst du ein offenes <?php am Anfang dieser Datei.
  5. Aber das Wichtigste: Verwenden Sie dieses Verfahren überhaupt nicht! phpmyadmin ist in Ordnung für kleine Datenbanken, aber nicht für große Datenbanken mit mehreren MB oder GB.

Sie haben andere Tools auf einem Server, um den Import durchzuführen.

a) Wenn Sie ein Server-Administrationssystem wie Plesk haben, verwenden Sie das Datenbank-Import-Tool.

b) Verwenden Sie ssh-Befehle, um ein Datenbank-Dump zu erstellen oder Datenbanken direkt in mysql über ssh zu schreiben. Befehle unten.

Erstellen Sie einen Datenbank-Dump:

mysqldump DBname --add-drop-table -h DBhostname -u DBusername -pPASSWORD > databasefile.sql

Schreiben Sie eine Datenbank in MySQL:

mysql -h rdbms -u DBusername -pPASSWORD DBname < databasefile.sql