Kompletten MySQL-Dump

Hallo zusammen,

Ich habe einen Apache-Webserver mit PHP + MySQL laufen.

Ich suche eine Möglichkeit per PHP-Script einen kompletten MySQL-Dump des kompletten MySQL-Systems zu machen um diesen dann weiter zu verwenden. (per FTP/Mail verschicken o. ä.)

Bisher habe ich nur komplette Administrationsprogramme in PHP gefunden.
Suche jedoch nur den Code für einen MySQL-Dump.
Im Endeffekt soll einfach eine localhost.sql erstellt werden. (ähnlich phpMyAdmin)

Gibt es überhaupt die direkte Anweisung in PHP für einen Dump? Wenn ja, wie lautet sie? Wenn nein, wie kann ich trotzdem durch einen einfachen Aufruf eines Script einen kompletten Backup durchführen?

Im Voraus vielen Dank,

phoenix

Auch hallo.

Das Programm heisst ganz einfach ‚mysqldump‘ und hat eine ganze Reihe an Optionen und Parametern:
mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]
mysqldump [OPTIONS] --all -databases [OPTIONS]

Weiteres im Buch ‚MySQL lernen‘ von Thomas Demming aus dem Addison-Wesley Verlag

HTH
mfg M.L.

Hi!
Nimm am besten phpMyBackupPro! Damit kannst du deine gesamten MySQL-Backups komfortabel verwalten und den Backupprozess sogar automatisieren. (Auch ohne Cron-Jobs.)
Weiter kannst du dir die Backups gleich per Email zusenden lassen oder auf einen FTP Server kopieren lassen. Komprimieren lassen sich die Backups auch, etweder im gzip oder ZIP Format.
Es ist eine Onlinehilfe verfügbar sowie ein Forum, eine FAQ und die Möglichkeit den Author per Kontakformular zu kontaktieren falls du Hilfe brauchst. Ist allerdings total einfach zu installiere und betrieben.
Eine deutsche Version ist auch verfügbar!

http://www.phpMyBackupPro.net

Gruss
Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Das ist zware ien schönes Programm, doch nciht das was gescuht wird.
mysqldump ist Kommandozeilenbasiert und man braucht einen SSH-Zugang zum Server um es auzuführen.
Gesucht wurde nach einem PHP basierten Programm!

Gruss
Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

exec() ?
exec() führt ein gegebenen Befehl aus, ohne eine Ausgabe zu erzeugen. Die Funktion gibt lediglich die letzte Zeile aus dem Befehlsergebnis zurück. Wenn Sie auf die direkte Rückgabe/ Ausgabe eines Befehls angewiesen sind, dann benutzen Sie stattdessen die Funktion passthru().

exec() führt ein gegebenen Befehl aus, ohne eine Ausgabe zu
erzeugen. Die Funktion gibt lediglich die letzte Zeile aus dem
Befehlsergebnis zurück. Wenn Sie auf die direkte Rückgabe/
Ausgabe eines Befehls angewiesen sind, dann benutzen Sie
stattdessen die Funktion passthru().

Was genau wolltest du mit diesem Zitat jetzt aussagen?

Um mysqldump mit passthru ausgefuehrt werden soll, muss aber mysqldump installiert sein, passthru freigegeben sein, und mysqldump auch noch vom user ausgefuerht werden duerfen.
Bei welchem Webhoster ist das schon moeglich?
Und ausserdem nehm ich an, das mysqldump eine Datei erstellt, und das Ergebnis nicht an die shell zurueckliefert. (Koennt mich aber auch taeuschen.)

Gruss
Dirk

Hallo zusammen,

Ich habe einen Apache-Webserver mit PHP + MySQL laufen.

Ich suche eine Möglichkeit per PHP-Script einen kompletten
MySQL-Dump des kompletten MySQL-Systems zu machen um diesen
dann weiter zu verwenden. (per FTP/Mail verschicken o. ä.)

Bisher habe ich nur komplette Administrationsprogramme in PHP
gefunden.
Suche jedoch nur den Code für einen MySQL-Dump.
Im Endeffekt soll einfach eine localhost.sql erstellt werden.
(ähnlich phpMyAdmin)

Gibt es überhaupt die direkte Anweisung in PHP für einen Dump?

Hi,

Es gibt mehrere Wege dies zu realisieren, einer davon ist ein Skript wie dieses. Es nutzt die PHP-Funktion mysql_list_tables, den SQL-Befehl ‚SHOW CREATE TABLE‘ für jede Tabelle und eine einfache Selektion aller Daten, um die Inserts zu schreiben. Du kannst es sicher für Deine Anwendung anpassen.

 $dbhost = "localhost";
 $dbuser = "user";
 $dbpwd = "pass";
 $dbname = "datenbank";
 $conn = @mysql\_connect($dbhost, $dbuser, $dbpwd); 
 if (!$conn) { 
 die(mysql\_error());
 }
 mysql\_select\_db($dbname);
 $f = fopen("/absoluter/pfad/zur/localhost.sql", "w");
 $tables = mysql\_list\_tables($dbname);
 while ($cells = mysql\_fetch\_array($tables)) {
 $table = $cells[0];
 fwrite($f,"DROP TABLE `$table`;\n"); 
 $res = mysql\_query("SHOW CREATE TABLE `$table`");
 if ($res) {
 $create = mysql\_fetch\_array($res);
 $create[1] .= ";";
 $line = str\_replace("\n", "", $create[1]);
 fwrite($f, $line."\n");
 $data = mysql\_query("SELECT \* FROM `$table`");
 $num = mysql\_num\_fields($data);
 while ($row = mysql\_fetch\_array($data)){
 $line = "INSERT INTO `$table` VALUES(";
 for ($i=1;$i
Die entsprechende Importfunktion ist leicht zu realisieren: die exportierte Datei einfach zeilenweise einlesen und mysql\_query für jede Zeile ausführen.
Nachteil: die Create-Tables sind etwas schwer leserlich, da der Zeilenumbruch nach den Feldern fehlt. Dafür ist der Import leichter, da genau deshalb das Parsen erspart bleibt.

Schönen Gruß,
Rudy

Um mysqldump mit passthru ausgefuehrt werden soll, muss aber
mysqldump installiert sein,

finde ich bei mir…

passthru freigegeben sein, und

exec sollte auch reichen und dass das nicht freigegeben ist ist denke ich eher selten…
bei mir auf localhost wäre das z.B.

$reply = exec ("\"c:\Program Files\EasyPHP\mysql\bin\mysqldump.exe\" $table -u $username \> $zieldatei");

und das funzt auch! (kein pw gesetzt bei mir -> brauchts ned @localhost)

mysqldump auch noch vom user ausgefuerht werden duerfen.

könnte sein… muss man halt ausprobieren…
aber @localhost: kein problem ^^

Und ausserdem nehm ich an, das mysqldump eine Datei erstellt,
und das Ergebnis nicht an die shell zurueckliefert. (Koennt
mich aber auch taeuschen.)

eine Datei wird mit > dateiname.sql erzeugt - ansonsten gehts in die shell… aber wir wollen doch eine Datei, oder etwa nicht?