4.8k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von timoxy Mitglied (133 Punkte)
Hallo zusammen,

kann mir jemand sagen, wieso folgender Code nicht funktioniert?

$user = 'root';
$pass = 'passwort';
$database = 'db';
$datei = 'backup/test.sql';

system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database > $datei", $fp);
if ($fp==0) echo "Backup erfolgreich!"; else echo "Es ist ein Fehler aufgetreten!";


Die Rechte stimmen :-) es legt die Datei an, aber diese ist leer.

Habe es mit xampp versucht.

Danke für jeden Tipp.

Grüße

13 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Die Syntax sieht für mich in Ordnung aus.
Mögliche Ursachen aus meiner Sicht:

- das Programm "/usr/bin/mysqldump" ist nicht installiert
- der $user existiert nicht
- das$pass ist falsch
- die $database existiert nicht

Daraus daß die Datei erstellt wird, lässt sich glaub ich nur schliessen:
- daß der Befehl "system( ..." funktioniert
- daß die Umleitung mit "... > $datei" funktioniert hat, also das ergebnis der vorigen Kommandos (nämlich anscheinend gar keins) in die Datei geschrieben wird

Welches Detail der Kommandos nicht funktioniert hat, lässt sich daraus nicht schliessen.
0 Punkte
Beantwortet von timoxy Mitglied (133 Punkte)
Ich danke dir für deine Analyse.

Habe ich das richtig verstanden: Da eine Datei erstellt wird, müsste das Programm "/usr/bin/mysqldump" installiert sein?

Oder eben nicht, da der Inhalt leer ist?

Sorry, bin mir da nicht sicher wie du es gemeint hast.

Wie/Wo kann ich denn nachschauen ob "/usr/bin/mysqldump" installiert ist. Und wenn nicht wo bekommen ich dieses Programm her?

Was ich beim vorigen Post vergessen hab: Es wir übrigens die Fehlermeldung ausgegeben: Es ist ein Fehler aufgetreten!

Muss ich eigentlich bei $database = die Datenbank oder die Tabelle angeben?
Ich habe es mit beidem versucht und es funktioniert beides nicht.

Danke für weitere Tipps.
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
Bei mysqldump ist eine Anleitung dabei. Benutz die doch einfach.

Wie/Wo kann ich denn nachschauen ob "/usr/bin/mysqldump" installiert ist.
Hasdt du es installiert? Wenn ja, ist es installiert. Wenn nein, ist es nicht installiert. Oder könnte es jemand anders installiert haben? Und selbst wenn du vergessen hast, ob du es installiert hast oder wenn es wirklich jemand anders installiert ahnen könnte, beantwortest du die Frage doch schon in der Frage selbst. Natürlich musst du das unter /usr/bin/mysqldump nachsehen. OK, wenn es da ist, könnte es noch fehlerhaft sein. Aber ob es da ist, solltest du erst mal nachsehen. Aber all das steht auch in der Beschreibung von mysqldump. Es gibt dabei sogar ein Html-Interface, sodass du die Einstellungen dort machen kannst.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
mysqldump kann an verschiedenen Orten installiert sein; /usr/bin/mysqldump ist die häufigste Variante, es ist jedoch auch z.B. /usr/local/bin/mysqldump denkbaroder auch /usr/local/mysql/bin/mysqldump...

Am besten den Besitzer/Betreiber des Servers fragen.
0 Punkte
Beantwortet von ennok Experte (1.2k Punkte)
Du könntest noch folgendes versuchen:

system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database > $datei 2>error.out", $fp);


Falls mysqldump existiert und ausgeführt wird, steht dann in error.out die Fehlerausgabe von mysqldump.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Habe ich das richtig verstanden: Da eine Datei erstellt wird, müsste das Programm "/usr/bin/mysqldump" installiert sein?
Oder eben nicht, da der Inhalt leer ist?

Dass eine Datei erstellt wird, sagt nichts darüber, ob mysqldump installiert ist oder nicht.

Wie/Wo kann ich denn nachschauen ob "/usr/bin/mysqldump" installiert ist. Und wenn nicht wo bekommen ich dieses Programm her?

- siehe andere antorten
- weiss ich nicht

Was ich beim vorigen Post vergessen hab: Es wir übrigens die Fehlermeldung ausgegeben: Es ist ein Fehler aufgetreten!

Diese Fehlermeldung ist natürlich nicht sehr aussagekräftig.
In diesem Fall wäre interessanter, woher die Fehlermeldung kommt, also vom PHP Befehl "system", vom Betriebssystem, von mysqldump oder vielleicht noch woanders her, vielleicht sogar aus einer ganz anderen Zeile als denen, über die wir hier reden.

Muss ich eigentlich bei $database = die Datenbank oder die Tabelle angeben?

die Datenbank ("Datenbank" auf Englisch heisst "Database")
0 Punkte
Beantwortet von macgyver031 Experte (2k Punkte)
Wenn du XAMPP installiert hast, musst du auch nicht die UNIX notation verwenden wenn du "System" aufrufst:

C:\xampp\mysql\bin
solltest du vewenden anstelle von /usr/bin/mysqldump
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
Und wenn nicht wo bekommen ich dieses Programm her?
Sorry, das hatte ich übersehen. Das gibt's auf www.mysqldumper.de/.
0 Punkte
Beantwortet von timoxy Mitglied (133 Punkte)
Ich danke euch für eure Antworten.

Ich habe das Problem zumindest fast gelöst bekommen.


$user = 'user';
$pass = 'pw';
$host = 'localhost';
$database = 'db';

$datei = 'backup/'.date("Y-m-d_H-i-s").'_'.$database.'.sql';

passthru("/usr/bin/mysqldump -u$user -p$pass -h $host $database > $datei", $fp);
if ($fp==0) {
echo 'Backup erfolgreich!<br /><br />';
echo '<a href="'.$datei.'">right click and save as</a>';
}

else echo "Es ist ein Fehler aufgetreten!";


so funktioniert es zumindest auf meinem Server bei domainFACTORY.

Auf XAMPP tut es so nicht. Habe mich aber auch nicht weiters darum gekümmert, da ich es nur obline brauche. Vielleicht muss ich einfach nur mysqldump installieren... die Lösung mit c:\ geht leider nicht ganz, da ich einem Mac habe. Werde aber verschiedene Dinge die Tage mal testen und dann posten. Habe nur aktuell keine Zeit dazu.

Weiß zufällig jemand noch wie ich gleich ein Download erzwinge, also ohne "right click and save as", so dass gleich die Frage kommt wo ich speichern möchte.

Ich danke alle für ihre Hilfe.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
mysqldump gehört standardmäßig zum mysql-Paket und sollte sich daher im selben Ordner befinden wie die anderen mysql-executables.

Eventuell hilft dir diese Info weiter:
dev.mysql.com/doc/refman/5.1/de/mac-os-x-installation.html
...