3MB-SQL-Befehl ausführen. Wie?
3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 13:19:26 von Nico Haberzettl
Hallo Group,
ich hab ein kleines Problem bei einspielen einer SQL-Datei:
die OpenGeoDB ist als tar.gz ~620kB gross, entpackt ~3MB, macht
mir aber beim uppen via PHPMyAdmin richtig Kummer.
Wenn ich das File (egal ob gepackt, oder nicht) hochlade, also
quasi via HTTP-Post im entsprechenden PMA-Formular einspielen
will, lädt der ne Weile, und bringt mir dann ne 404.
Lokal passiert ähnliches.
Wenn ich versuche die Datei (ungepackt) in ein selbsterstelltes
PHP-Skript einzulesen, und dann das enthaltene Kommando per
mysql_query() ausführen will, bekomme ich lokal die Meldung "Mysql
Server has gone away", was sich für mich ehrlich gesagt nur bedingt
positiv anhört.
Ich möchte vermeiden das Statement in 10 Päcken packen zu müssen,
sondern würde das das Update schon gerne in einem Zug durchführen.
Es scheint NICHT am Speicherverbrauch zu liegen (13MB erlaubt mein
Hoster) und auch nicht an der max. Skriptlaufzeit (90 Sek.), die wird
nicht überschritten.
Jedenfalls bin ich im Moment ein bisserl ratlos.
Ich könnte zwar meinen Hoster bemühen, denn die würden mir die Daten
schon von Hand einspielen, aber es kann ja nicht sein, daß ich wegen
jedem mittelgrossen Update die Techniker durch die Gegend scheuchen
muss... das muss doch auch anders gehen.
Hat wer Ideen?
mfg
Nico Haberzettl
Re: 3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 14:00:32 von jpm-account-forwards-to-dev-null-use-reply-adress
Nico Haberzettl schrieb:
> ich hab ein kleines Problem bei einspielen einer SQL-Datei:
> die OpenGeoDB ist als tar.gz ~620kB gross, entpackt ~3MB, macht
> mir aber beim uppen via PHPMyAdmin richtig Kummer.
Hast Du shell Zugriff? Wenn ja, dann geht's einfach:
mysql -u -p <
Alles zwischen spitzen Klammern ist durch Deine entsprechenden Daten zu
ersetzen.
Hast Du keinen shell Zugriff? Dann ginge es aber möglicherweise, obiges
einfach per PHP Systemfunktion auszuführen. Zum Beispiel:
system ("mysql ...");
Sonst weiß ich auch nicht weiter.
Gruß, JPM
--
SPAMSCHUTZ: Meine E-Mail Adresse ist verschlüsselt.
Wenn Du mir per Mail antworten möchtest, führe bitte
zweimal ROT-13 auf meiner E-Mail Adresse aus.
Re: 3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 14:12:51 von Joerg Behrens
"Nico Haberzettl" schrieb im Newsbeitrag
news:2sv8htF1q406iU1@uni-berlin.de...
> Hallo Group,
>
> ich hab ein kleines Problem bei einspielen einer SQL-Datei:
> die OpenGeoDB ist als tar.gz ~620kB gross, entpackt ~3MB, macht
> mir aber beim uppen via PHPMyAdmin richtig Kummer.
> Wenn ich das File (egal ob gepackt, oder nicht) hochlade, also
> quasi via HTTP-Post im entsprechenden PMA-Formular einspielen
> will, lädt der ne Weile, und bringt mir dann ne 404.
> Lokal passiert ähnliches.
Dein Upload ist zu langsam oder der PMA kann es nicht entpacken.
> Wenn ich versuche die Datei (ungepackt) in ein selbsterstelltes
> PHP-Skript einzulesen, und dann das enthaltene Kommando per
> mysql_query() ausführen will, bekomme ich lokal die Meldung "Mysql
> Server has gone away", was sich für mich ehrlich gesagt nur bedingt
> positiv anhört.
Das haengt vom Dump nun ab. Aus Performance Gruenden kann man Extend Insert
machen was zu einem grossen langen SQL Statement fuehrt. Wie lang das ist
haengt von den akt. Serversettings ab. Wenn auf dem anderen Rechner hier
ein geringers Limit eingestellt ist kannst du das SQL Statement nicht mehr
ausfuehren. (besagte Fehlermeldung deutet darauf hin)
[o2k]:/ $ mysqladmin -u root -p variables | grep packet
Enter password:
| max_allowed_packet | 16776192
Sind bei mir hier 16MB was das Maximum ist. Passe deine Settings an oder
machen KEINE Extends Inserts beim erstellen des Dumps dann klappt auch mit
dem einspielen wieder.
Waere aber eigentliche eine Frage fuer die mysql Newsgroup gewesen oder?
Gruss
Joerg
--
TakeNet GmbH Mobil: 0171/60 57 963
D-97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
Re: 3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 16:05:02 von Nico Haberzettl
Joerg Behrens schrieb:
>>
>>ich hab ein kleines Problem bei einspielen einer SQL-Datei:
>>die OpenGeoDB ist als tar.gz ~620kB gross, entpackt ~3MB, macht
>>mir aber beim uppen via PHPMyAdmin richtig Kummer.
>>Wenn ich das File (egal ob gepackt, oder nicht) hochlade, also
>>quasi via HTTP-Post im entsprechenden PMA-Formular einspielen
>>will, lädt der ne Weile, und bringt mir dann ne 404.
>>Lokal passiert ähnliches.
>
>
> Dein Upload ist zu langsam oder der PMA kann es nicht entpacken.
>
Hm. Eher der Upload, weil das ganze passiert auch bei ungepackten Files,
wie gesagt.
>
>
>>Wenn ich versuche die Datei (ungepackt) in ein selbsterstelltes
>>PHP-Skript einzulesen, und dann das enthaltene Kommando per
>>mysql_query() ausführen will, bekomme ich lokal die Meldung "Mysql
>>Server has gone away", was sich für mich ehrlich gesagt nur bedingt
>>positiv anhört.
>
>
> Das haengt vom Dump nun ab. Aus Performance Gruenden kann man Extend Insert
> machen was zu einem grossen langen SQL Statement fuehrt. Wie lang das ist
> haengt von den akt. Serversettings ab. Wenn auf dem anderen Rechner hier
> ein geringers Limit eingestellt ist kannst du das SQL Statement nicht mehr
> ausfuehren. (besagte Fehlermeldung deutet darauf hin)
>
> [o2k]:/ $ mysqladmin -u root -p variables | grep packet
> Enter password:
> | max_allowed_packet | 16776192
>
Also lt. Konfiguration sind 8MB bei mir das Maximum.
Sollte aber bei einer 3MB-Datei reichen, oder?
> Sind bei mir hier 16MB was das Maximum ist. Passe deine Settings an oder
> machen KEINE Extends Inserts beim erstellen des Dumps dann klappt auch mit
> dem einspielen wieder.
>
> Waere aber eigentliche eine Frage fuer die mysql Newsgroup gewesen oder?
>
Wenn ich deine Antwort zugrunde lege, ja.
Aber ich bin davon ausgegangen, daß das Problem mit dem PHP-Interface
zusammenhängt ;) Weil ja PHP das File zu Mysql schiebt. Und Mysql selber
sollllllte eigentlich mit 3 MB keine Probleme haben.
mfg
Nico
Re: 3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 16:10:42 von Axel Schwenke
Nico Haberzettl wrote:
>
> ich hab ein kleines Problem bei einspielen einer SQL-Datei:
> die OpenGeoDB ist als tar.gz ~620kB gross, entpackt ~3MB, macht
> mir aber beim uppen via PHPMyAdmin richtig Kummer.
PHPMyAdmin ist Spielzeug.
> Wenn ich das File (egal ob gepackt, oder nicht) hochlade, also
> quasi via HTTP-Post im entsprechenden PMA-Formular einspielen
> will, lädt der ne Weile, und bringt mir dann ne 404.
> Lokal passiert ähnliches.
....
Du schreibst hier ne Menge Zeug, aber die wichtigen Randbedingungen
läßt du weg.
Ich versuche mal zu erraten, was dein Problem ist:
1. dein Webspace + MySQL-Server steht beim Hoster
2. du hast einen länglichen SQL-Dump lokal vorliegen
3. du willst diesen SQL-Dump irgendwie in deine Datenbank bekommen
Dann hast du zwei getrennte Probleme zu lösen:
1. den Dump in die Nähe der Datenbank bekommen
Da dein Webserver und deine Datenbank vermutlich nahe beieinander
stehen, ist dein Webspace ein guter Ort. Kompression spart Platz und
Bandbreite. Also lade den komprimierten Dump irgendwie auf deinen
Webspace. Entweder per FTP- oder per HTTP-Upload. Ganz Schlaue setzen
ein 'wget http://url.zum/dump' per PHP-system()-Funktion direkt auf
ihrem Webserver ab. Da der Dump ja sicher irgendwo im Web liegt,
kannst du dir den Umweg über deinen heimatlichen Rechner sparen und
von der (hoffentlich) guten Anbindung deines Hosters profitieren.
2. den Dump in die Datenbank einspielen
Nachdem du die Daten irgendwie entpackt hast, sollte ein File mit dem
SQL-Dump vorliegen. Wenn der Dumpende nicht total braindead war,
enthält es SQL-Statements mit einer maximalen Länge von 1MB (so macht
das z.B. 'mysqldump --opt'). Am einfachsten bekommst du den Kram in
die Datenbank, indem du das 'mysql' Kommando benutzt:
'mysql -u... -p... zieldatenbank
Webserver auf getrennten Maschinen laufen, braucht 'mysql' noch die
-h Option. Einfach mal im Manual nachlesen. Notfalls wieder ein PHP-
system() drumherumwickeln. Das ganze system() Gedöhns kannst du dir
natürlich sparen, wenn dein Hoster dir Shell-Zugang gewährt.
Wenn dein Hoster dir weder eine Shell noch die MySQL-Kommandozeilen-
tools per system() gestattet, ist es *jetzt* Zeit, zu wechseln.
Prinzipiell kannst du den Dump natürlich auch per PHP-Skript in
einzelne SQL-Statements zerlegen und an die Datenbank verfüttern.
Aber das macht extra Arbeit, ist fehleranfällig und langsam.
XL
Re: 3MB-SQL-Befehl ausführen. Wie?
am 11.10.2004 16:34:04 von Nico Haberzettl
Axel Schwenke schrieb:
>
> Du schreibst hier ne Menge Zeug, aber die wichtigen Randbedingungen
> läßt du weg.
>
> Ich versuche mal zu erraten, was dein Problem ist:
>
> 1. dein Webspace + MySQL-Server steht beim Hoster
> 2. du hast einen länglichen SQL-Dump lokal vorliegen
> 3. du willst diesen SQL-Dump irgendwie in deine Datenbank bekommen
>
Alles vollkommen richtig, wobei sich das Problem auch bei mir lokal
unter WAMP und LAMP identisch äußert, und damit unabhängig von meinem
Hoster ist.
Insofern bezieht sich meine Frage nur ganz allgemein auf die
geschickteste Vorgehensweise in so einem Fall. Egal ob on- oder offline.
> Dann hast du zwei getrennte Probleme zu lösen:
>
> 1. den Dump in die Nähe der Datenbank bekommen
>
> Da dein Webserver und deine Datenbank vermutlich nahe beieinander
> stehen, ist dein Webspace ein guter Ort. Kompression spart Platz und
> Bandbreite. Also lade den komprimierten Dump irgendwie auf deinen
> Webspace. Entweder per FTP- oder per HTTP-Upload. Ganz Schlaue setzen
> ein 'wget http://url.zum/dump' per PHP-system()-Funktion direkt auf
> ihrem Webserver ab. Da der Dump ja sicher irgendwo im Web liegt,
> kannst du dir den Umweg über deinen heimatlichen Rechner sparen und
> von der (hoffentlich) guten Anbindung deines Hosters profitieren.
Knapp daneben. Den hab in der Form nur ich (weil runtergeladen und
selber dran rumgeschraubt), aber mit FTP kann ich umgehen, und der Dump
ist bereits up.
>
> 2. den Dump in die Datenbank einspielen
>
> Nachdem du die Daten irgendwie entpackt hast, sollte ein File mit dem
> SQL-Dump vorliegen. Wenn der Dumpende nicht total braindead war,
> enthält es SQL-Statements mit einer maximalen Länge von 1MB (so macht
> das z.B. 'mysqldump --opt'). Am einfachsten bekommst du den Kram in
> die Datenbank, indem du das 'mysql' Kommando benutzt:
> 'mysql -u... -p... zieldatenbank
> Webserver auf getrennten Maschinen laufen, braucht 'mysql' noch die
> -h Option. Einfach mal im Manual nachlesen. Notfalls wieder ein PHP-
> system() drumherumwickeln. Das ganze system() Gedöhns kannst du dir
> natürlich sparen, wenn dein Hoster dir Shell-Zugang gewährt.
Ist mir soweit mittlerweile auch klar, danke.
Ich werd das Skript, was ich geschrieben hab denn eben entsprechend
anpassen, und versuchen via system() die ganze Geschichte zu
beschleunigen. Weil bissl langsam isses ja schon, da hast du (weiter
unten) recht.
> Wenn dein Hoster dir weder eine Shell noch die MySQL-Kommandozeilen-
> tools per system() gestattet, ist es *jetzt* Zeit, zu wechseln.
Kein Bedarf, system() darf ich, auf ssh hab ich mit dem letzten
Tarifwechsel freiwillig verzichtet. *duck* Ehrlich, habs bisher nie
wirklich gebraucht.
>
> Prinzipiell kannst du den Dump natürlich auch per PHP-Skript in
> einzelne SQL-Statements zerlegen und an die Datenbank verfüttern.
> Aber das macht extra Arbeit, ist fehleranfällig und langsam.
However, genau das hab ich als Sofortlösung mittlerweile getan, und
es funktioniert soweit ganz gut. Aber wie gesagt, ich werd mal dran
schrauben.
Danke für die Hilfe
Nico
Re: 3MB-SQL-Befehl ausführen. Wie?
am 13.10.2004 11:57:35 von Ralf Huskobla
Hallo,
hilft Dir:
http://faq.1und1.com/hosting/scripte_datenbanken/datenbanken /4.html
irgendwie weiter?
Bei mir klappt es so.
MfG Hussi