mysqldump
Tech
- php
Hi ihr! :)
Ich versuche mit mysqldump einen Backup zu machen.
Ich habe mir dazu folgenden Code zusammengestellt:
include("enbit_backup/config.inc.php");
$name = md5("backup")."-".date("d\.m\.Y");
//Datenbank sichern
ignore_user_abort(true); //Kein Timeout
$file = $name.".sql";
$dirname = dirname(__FILE__)."/";
$mysqldump = $dirname.$file;
system("mysqldump -u".$db_user." -p".$db_pass." -hlocalhost --databases ".$db." > ".$mysqldump.", ".$fp);
echo ($fp==0) ? "Daten exportiert" : "Es ist ein Fehler aufgetreten";
Wenn ich dieses Script jedoch mit meinem Browser aufrufe passiert gar nichts :(
Damit diese Frage gleich beantwortet ist, ich habe die Variablen natürlich alle definiert (in der config.inc.php) und die Daten stimmen auch alle die ich dort angegeben habe.
Meine Frage ist nun habt ihr eine Erklärung weshalb das Script keinen Backup erstellt? Fehlermeldung kommt übrigens keine. Es kommt nur "Daten exportiert"...
echo $begrüßung;
system("mysqldump -u".$db_user." -p".$db_pass." -hlocalhost --databases ".$db." > ".$mysqldump.", ".$fp);
Wenn ich dieses Script jedoch mit meinem Browser aufrufe passiert gar nichts :(
Was gibt system() zurück? Wenn das ein leerer String ist, versuch das Ganze mit exec() und schau, was nach dem Aufruf in der als zweiten Parameter übergebenen Variable steht.
Damit diese Frage gleich beantwortet ist, ich habe die Variablen natürlich alle definiert (in der config.inc.php) und die Daten stimmen auch alle die ich dort angegeben habe.
Das ist schön für dich, aber wir wissen nicht was drin steht, und was dem Aufruf daran nicht gefallen haben könnte.
echo "$verabschiedung $name";
Hi, jetzt habe ich wieder eine ganze Stunde versucht das hinzubekommen.. jedoch hat sich nichts geändert.
Was ich noch sagen sollte:
system("C:\Programme\xampp\mysql\bin\mysqldump -u".$db_user." -p".$db_pass." -hlocalhost --databases ".$db."> ".$mysqldump);
Wenn ich das so bei meinem localhost probiere funktioniert es einwandfrei.
Funktioniert es bei meinem Onlineserver vielleicht deswegen nicht, weil ich den direkten Pfad zu mysqldump nicht angebe? (Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Was gibt system() zurück?
Kannst du mir sagen wie ich das nachschauen kann?
Meinst du:
echo system();
?
echo $begrüßung;
Funktioniert es bei meinem Onlineserver vielleicht deswegen nicht, weil ich den direkten Pfad zu mysqldump nicht angebe?
Das kann eine Ursache sein. Versuche nicht zu raten, versuche Hinweise zu bekommen. Vermutlich gibt es eine Fehlermeldung, die im Rückgabewert von system() steht. Allerdings liefert system() nur die letzte Zeile. Für mehrzeilige Ausgaben solltest du exec() verwenden.
(Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Unter Unix-Systemen gibt es oftmals which.
Was gibt system() zurück?
Kannst du mir sagen wie ich das nachschauen kann?
Zunächst schaust du ins PHP-Handbuch. Was gibt system() zurück? Einen String. Wie kann man Strings anzeigen?
Meinst du:
echo system();
?
Ja, das wäre eine Möglichkeit. Eine andere wäre eine Variable zu benutzen und diese auszugeben.
Das Handbuch sollte immer eine der ersten Quellen zur Fehlersuche sein. Es beantwortet Fragen wie: Welche Parameter erwartet eine Funktion? Was gibt sie zurück? Wie verhält sie sich im Gut-Fall und wie im Fehlerfall? Nicht immer ist PHP gesprächig und wirft mit Fehlermeldungen um sich. Manchmal muss man genauer hinsehen wie man an Hinweise zum Erfolgsstatus gelangt.
echo "$verabschiedung $name";
Hallo!
(Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Das nützt nichts. which zeigt nur den Pfad von in PATH befindlichen ausführbaren Programmen an.
Dh. wenn mysqldump nicht im PATH ist, dann zeigt dir which auch nichts an.
mfg
frafu
echo $begrüßung;
(Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Das nützt nichts. which zeigt nur den Pfad von in PATH befindlichen ausführbaren Programmen an.
Dh. wenn mysqldump nicht im PATH ist, dann zeigt dir which auch nichts an.
Dann ist aber deine Absolut-Aussage "Das nützt nichts." nicht richtig. Denn wenn es drin ist, und das wird wohl oftmals der Fall sein, wird der Pfad ja angezeigt.
which sollte man am normalen Shell-Prompt eingeben. Im Normalfall sollte man davon ausgehen können, dass der mit einem gut gefüllten PATH ausgestattet ist. Die Chancen, mit which Erfolg zu haben, sind also nicht 100 % aber doch recht hoch.
echo "$verabschiedung $name";
Das kann eine Ursache sein. Versuche nicht zu raten, versuche Hinweise zu bekommen. Vermutlich gibt es eine Fehlermeldung, die im Rückgabewert von system() steht. Allerdings liefert system() nur die letzte Zeile. Für mehrzeilige Ausgaben solltest du exec() verwenden.
Okay ich habe jetzt folgendes probiert:
Line: 10: exec("mysqldump -u$db_user -p$db_pass -hlocalhost --databases $db > ".dirname(__FILE__)."/temp/dump.sql");
Line: 11: echo exec();
Wie üblich (ich verzweifel bald :( ) wurde keine Datenbanksicherung angelegt.
Warnung wurde mir diese angezeigt:
Warning: Wrong parameter count for exec() in /var/www/web1148/html/backup-client.php on line 11
Dann habe ich ebenfalls das hier ausprobiert:
Line: 10: exec("mysqldump -u$db_user -p$db_pass -hlocalhost --databases $db > ".dirname(__FILE__)."/temp/dump.sql, $exec");
Line: 11: echo exec['0'];
Da wurde mir jedoch keine Fehlermeldung und Warnung angezeigt.
(Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Unter Unix-Systemen gibt es oftmals which.
Wie verwende ich dieses which? Ich habe im PHP Handbuch keine which Funktion gefunden... hat das gar nichts mit PHP zu tun?
Ich komme einfach nicht weiter...
Hi,
Line: 10: exec("mysqldump -u$db_user -p$db_pass -hlocalhost --databases $db > ".dirname(FILE)."/temp/dump.sql");
Line: 11: echo exec();
> Warnung wurde mir diese angezeigt:
> Warning: Wrong parameter count for exec() in /var/www/web1148/html/backup-client.php on line 11
Schreibe das echo vor Zeile 10 und lasse Zeile 11 weg.
> > Unter Unix-Systemen gibt es oftmals which.
>
> Wie verwende ich dieses which? Ich habe im PHP Handbuch keine which Funktion gefunden... hat das gar nichts mit PHP zu tun?
Das ist ein Unix/Linux-Befehl. Der bringt dir nur was, wenn du einen Unix/Linux-Server hast, auf den du in der Kommandozeile zugreifen kannst.
Du musst dann einfach "which mysqldump" auf der Kommandozeile eingeben und wenn du glück hast wird dir dann der entsprechende Pfad angezeigt.
Ob es unter Windows was ähnliches gibt weiß ich nicht.
mfG,
steckl
Hi,
Line: 10: exec("mysqldump -u$db_user -p$db_pass -hlocalhost --databases $db > ".dirname(FILE)."/temp/dump.sql");
Line: 11: echo exec();
>
> > Warnung wurde mir diese angezeigt:
> > Warning: Wrong parameter count for exec() in /var/www/web1148/html/backup-client.php on line 11
>
> Schreibe das echo vor Zeile 10 und lasse Zeile 11 weg.
Gut habe ich gemacht, danke für die Antwort.
Es wird gar nichts angezeigt. Heißt das, das keine Fehler vorhanden sind?
echo $begrüßung;
Okay ich habe jetzt folgendes probiert:
Line: 10: exec("mysqldump -u$db_user -p$db_pass -hlocalhost --databases $db > ".dirname(__FILE__)."/temp/dump.sql");
Line: 11: echo exec();
Bitte nicht wild rumraten. Schau dir die Handbuchseite zu exec() an. Lies den Text. Du siehst darin, dass der Rückgabewert genau wie bei system() die letzte Zeile der Ausgabe ist, also möglicherweise zu wenig Information enthält. Der Unterschied zu system() ist aber die Übergabe der Parameter.
string exec ( string $command [, array &$output [, int &$return_var]] )
$output ist nun also laut Text die Stelle, an der die komplette Ausgabe des von exec() ausgeführten Kommandos landet. Übergib da eine Variable und schau dir nach dem Aufruf ihren Inhalt an.
(Wie kann ich rausfinden wie der korrekte Pfad heißt?)
Unter Unix-Systemen gibt es oftmals which.
Wie verwende ich dieses which? Ich habe im PHP Handbuch keine which Funktion gefunden... hat das gar nichts mit PHP zu tun?
steckl hat ja schon gesagt, dass das ein Kommandozeilenbefehl ist. Wenn du keinen Kommandozeilenzugriff hast bleibt dir nur, deinen Systemverwalter zu fragen, wie der Pfad lautet.
echo "$verabschiedung $name";
Hi,
system("mysqldump -u".$db_user." -p".$db_pass." -hlocalhost --databases ".$db." > ".$mysqldump.", ".$fp);
echo ($fp==0) ? "Daten exportiert" : "Es ist ein Fehler aufgetreten";
Hast du dir den String, den dein System-call verarbeitet mal mit echo ausgeben lassen und auf der Kommandozeile ausprobiert?
Was ist dieses "$fp" das du hinten an den String anhaengst?
Ausserdem koenntest du die einzelnen Variablen direkt in den String schreiben (und nicht mit "." jedesmal verketten), da zwischen doppelten Anfuehrungszeichen Variablen interpoliert werden.
Wenn ich dieses Script jedoch mit meinem Browser aufrufe passiert gar nichts :(
Es muss doch eine Meldung kommen. Entweder "Daten exportiert" oder "Es ist ein ...". Aber diese Meldung sagt wohl nichts ueber den Erfolg des Dumpens aus.
Fehlermeldung kommt übrigens keine. Es kommt nur "Daten exportiert"...
Ich bin nicht sehr fit in PHP, aber da gibt error_reporting oder so aehnlich. Hast du das eingeschaltet?
mfG,
steckl