Importieren Sie eine große Datei in der MySQL DB

8

Ich möchte etwa 50.000 mysql Abfrage für 'Einfügen' in mysql db einfügen, Dafür habe ich 2 Optionen,

1- Importieren Sie die (.sql) Datei direkt: Folgefehler tritt auf "Sie haben wahrscheinlich versucht, eine zu große Datei hochzuladen. Informationen zur Umgehung dieses Limits finden Sie in der Dokumentation."

2- Verwenden Sie PHP-Code, um diese Abfragen in Form von verschiedenen Chunks aus der (.SQL) -Datei einzufügen. Hier ist mein Code:

%Vor%

Aber Speichergrößenfehler treten auf, allerdings habe ich Speichergrenzen von 128M auf 256M oder sogar 512M erweitert.

Dann denke ich, dass, wenn ich in der Lage sein würde, eine begrenzte Anzahl von Zeilen aus einer Datei (.sql) zu laden und eine mysql-Abfrage auszuführen, dann könnte es alle Datensätze von der Datei in db importieren. Aber hier habe ich keine Ahnung, wie man mit dem Dateianfangsort bis zum Ende umgehen soll und wie ich den Start- und Endort aktualisieren kann, damit es die zuvor abgerufenen Zeilen nicht aus der .sql-Datei holt.

    
PHP Ferrari 06.01.2010, 06:15
quelle

4 Antworten

4

Hier ist der Code, den Sie brauchen, jetzt verschönert ! = D

%Vor%

Grundsätzlich ist es eine weniger gierige Version Ihres Codes, anstatt die gesamte Datei im Speicher zu öffnen, liest und führt er kleine Blöcke (eine Zeile) von SQL-Anweisungen aus.

    
Alix Axel 06.01.2010, 06:35
quelle
2

Anstatt die gesamte Datei in den Speicher zu laden, was bei der Verwendung der Datei getan wird, eine mögliche Lösung wäre es, Zeile für Zeile zu lesen, mit einer Kombination von fopen , fgets und fclose - Die Idee ist, nur das zu lesen, was Sie brauchen, mit den Zeilen umzugehen, die Sie haben, und erst dann die nächsten zu lesen.


Außerdem können Sie sich diese Antwort ansehen: Best Übung: Importieren von mySQL-Datei in PHP; geteilte Abfragen

Es gibt noch keine akzeptierte Antwort, aber einige der gegebenen Antworten könnten Ihnen bereits helfen ...

    
Pascal MARTIN 06.01.2010 06:34
quelle
1

Verwenden Sie den Befehlszeilenclient, der weitaus effizienter ist und 50K-Einfügungen problemlos verarbeiten sollte:

%Vor%     
Alex Budovski 06.01.2010 11:33
quelle
0

Ich habe kürzlich gelesen, wie schnell viele Abfragen in eine Datenbank eingefügt werden können. Der Artikel schlug vor, den sleep () (oder usleep ) Funktion um einige Sekunden zwischen Abfragen zu verzögern, um den MySQL Server nicht zu überlasten.

    
Chaim 06.01.2010 11:23
quelle

Tags und Links