PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tipp für mySQL-Dump


c4
03.09.2003, 18:37:39
Moin,

da ich im Forum nichts wirklich brauchbares finden konnte, wie man ein Backup von seinen Tabellen machen kann, stelle ich meine erarbeitete Lösung mal rein, auf dass sie bei den nächsten Suchen zum Thema gefunden wird. Das zur Vorgeschichte.

Mit der Einführung CronJobs auf SelfPHP (http://selfphp.com/cronjobs/) musste ich mir ein Toolchen schreiben, dass meine DB sichert. Am einfachsten geht das ja mit einem Dump. Der simple Code sieht dann so aus:<?php
@shell_exec('mysqldump --add-drop-table -c -n
-h HOST --user=NUTZERNAME
--pass=PASSWORT DATENBANKNAME
TABELLEN > DATEINAME');
exit;
?> HOST, NUTZERNAME, PASSWORT und DATENBANKNAME sollten einleuchtend sein. Bei TABELLEN gibt man einfach durch Leerzeichen getrennt die Tabellen an, die gesichert werden sollen. DATEINAME gibt an, in welcher Datei der Dump gespeichert werden soll. -c bedeutet, dass die INSERTs komplett geschrieben werden sollen. -n heißt, dass die Datenbank nicht neu erstellt werden soll.

Wenn die gesamte Datenbank exportiert werden soll, dann mal so probieren:<?php
@shell_exec('mysqldump --add-drop-table -c -n
-h HOST --user=NUTZERNAME
--pass=PASSWORT
--all-databases > DATEINAME');
exit;
?>

Wenn's nicht klappt sind entweder die Zugangsdaten falsch oder shell_exec() wird nicht unterstützt. Es kann auch helfen in die vielleicht erstellte Datei zu schauen, ob dort was steht.

Es gibt noch mehr Parameter, die ich hier nicht erklären will, schließlich gibt's das schon: en (http://www.mysql.com/doc/en/mysqldump.html), de (http://www.mysql.com/doc/de/mysqldump.html)


So, hoffe geholfen zu haben.

Ben20
03.09.2003, 19:06:57
Warum packst Du das nicht zur "Tipps & Tricks" - gibts sogar noch Gewinnspielpunkte dafür!

c4
03.09.2003, 19:12:09
lach!

Einerseits war es nicht meine Absicht an dem Gewinnspiel teilzunehmen, andererseits soll dieser Thread anderen helfen und nicht mir.
Gibt man nun 'dump' als Suchanfrage ein, landet man hier - so war es auch gedacht. :)

chris17
03.09.2003, 22:37:17
*räusper*

Hallo c4,
Einerseits war es nicht meine Absicht an dem Gewinnspiel teilzunehmen, andererseits soll dieser Thread anderen helfen und nicht mir.
Genau deswegen solltest Du am "(Fleiss-)Gewinnspiel" mitmachen, wenn es Deine Zeit erlaubt. (Musst doch "nur" Deine Threads durchforsten, und das Beste in die Templates pfrimmeln. :-) ) // Ist plenken nach einem Smilie statthaft?
Ich bin mir sicher, dass viele Beiträge von Dir veröffentlicht werden. Und damit könntest Du auch vielen helfen.

Beste Grüsse und nix für Ungut

chris17

P.S.:Den hier bitte net vergessen :-) (http://www.selfphp.info/forum/showthread.php?s=&threadid=5396)

c4
04.09.2003, 06:28:24
Zeit hab ich, aber keine Lust teilzunehmen.

Besonders das Problem mit der IP des Nutzers. Ich würde gar nicht erst bei Tipps & Tricks danach suchen - vermutlich auch die meisten anderen.

Nee, nee, lass mal gut sein.


Carsten.

|Coding
05.09.2003, 19:59:20
Original geschrieben von _c_4_
vermutlich auch die meisten anderen.

irr dich da mal nicht.

c4
05.09.2003, 20:03:02
Na gut, dann halt nicht. :)

c4
27.10.2003, 08:23:57
Ein Nachtrag von mir.

Da es bei mir vorkommt, dass ich Daten lokal bearbeite, macht es ja Sinn, den Im- und Export lokal und online funktionieren zu lassen.
Gelöst habe ich das wie folgt:<?php
//////////////
// export.php
//////////////

if (strstr(strtolower($_SERVER['SERVER_NAME']), 'dbcf.de')) { // Domain, zur Unterscheidung online/lokal
// online
$u=''; // Nutzername
$p=''; // Passwort
$h=''; // Host
$d=''; // DB-Name
$str='mysqldump --add-drop-table --quote-names --extended-insert --no-create-db --host '.$h.' --user='.$u.' --pass='.$p.' '.$d.' ';
}
else {
// lokal
$u=''; // Nutzername
$p=''; // Passwort
$h=''; // Host
$d=''; // DB-Name
$str='c:progra~1mysqlinmysqldump --add-drop-table --quote-names --extended-insert --no-create-db --host '.$h.' --user='.$u.' --pass='.$p.' '.$d.' ';
}

shell_exec($str.'tabelle1 tabelle2 > zieldatei1');
shell_exec($str.'tabelle3 tabelle4 tabelle5 > zieldatei2');

exit;
?>


<?php
//////////////
// import.php
//////////////
if (strstr(strtolower($_SERVER['SERVER_NAME']), 'dbcf.de')) { // Domain, zur Unterscheidung online/lokal
// online
$u=''; // Nutzername
$p=''; // Passwort
$h=''; // Host
$d=''; // DB-Name
$str='mysql --host '.$h.' --user='.$u.' --pass='.$p.' '.$d.' < ./';
}
else {
// lokal
$d=''; // DB-Name
$str='c:progra~1mysqlinmysql --database='.$d.' < c:phpackup\';
}

shell_exec($str.'zieldatei1');
shell_exec($str.'zieldatei2');

exit;
?> Die Backups werden in dem Verzeichnis erstellt, wo sich die Datei import.php befindet. Beim Import wird davon ausgegangen, dass sich die Dateien ebenfalls im selben Verzeichnis aufhalten.