MySQL-Dump erstellen und wieder einspielen
Celi
- php
hi!
es soll einmal täglich ein mysql-dump erstellt werden.
Weiters soll der gleiche dump einmal täglich in eine andere
MySQL auf einem Server eingespielt werden.
Das wieder einspielen der Daten wollte ich ja so
ungefähr machen:
mysqli_multi_query($connection, file_get_contents('dump.sql'))
mysqli wird aber leider bei meinem Provider nicht unterstützt.
Eine verbindung zu MySQL kann PHP aber herstellen,
sonst würde joomla auch nicht laufen können.
Der backup und einspiel prozess soll automatisiert ablaufen (cronjob)
wie hat das script dafür auszusehen?
Danke
Celi
yo,
falls (in aller regel eher nicht, aber provider fragen) du zugriff auf die datenbank dateien hast und die datenbank auch mal offline ist, kannst du via ftp die dateien einmal täglich einfach runterladen.
außerdem fragen, ob dein provider überhaupt cronjobs bereitsstellt. den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und die dump datei dann wieder per ftp runtergelanden werden. also ich würde das weniger über php machen.
Ilja
falls (in aller regel eher nicht, aber provider fragen) du zugriff auf die datenbank dateien hast
nein, habe ich nicht
außerdem fragen, ob dein provider überhaupt cronjobs bereitsstellt.
ja - tut er
den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und
nein kann es nicht ... und das hat seinen Grund...
also ich würde das weniger über php machen.
Gut - ich nicht!
Meine Frage war konkret wie das mit PHP geht ...
Danke
Celi
Hallo Forum,
den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und
nein kann es nicht ... und das hat seinen Grund...
Und der wäre? Bei meinem Hoster geht das.
also ich würde das weniger über php machen.
Gut - ich nicht!
Meine Frage war konkret wie das mit PHP geht ...
Dann musst du halt einen SQL-Parser in PHP bauen, mit dem du deine Datei in einzelne Queries zerlegen kannst.
explode(';', $file_get_contents('dump.sql')) ist keine Lösung, weil Zeichenketten in einzelnen Queries Semikola enthalten können.
Gruß
Alexander Brock
Hallo Celi,
mit
#########################
$sql_inhalt = '';
$rs = mysql_list_tables ($db, $conn);
while($table = mysql_fetch_row($rs)){
$sql = "SELECT * FROM ".$table[0]."
";
$rs2 = @mysql_query($sql);
while($ds = mysql_fetch_row($rs2)){
$sql_fields = array();
for($i=0;$i<mysql_num_fields($rs2);$i++){
$sql_fields[] = mysql_escape_string($ds[$i]);
}
$sql_inhalt .= "INSERT INTO ".$table[0]."
VALUES ('".implode("','",$sql_fields)."');\n";
}
}
########################
hast du schon mal die Queries in einer Datei.
Soll die komplette DB "gespiegelt" werden müsstest du jetzt die Tabelleninhalte auf der ZielDB löschen, dann aus der $sql_inhalt Zeilenweise einlesen (trennen bei \n) und die Queries ausführen.
Es kann aber sein das bei sehr vielen Queries die Laufzeit des Scripts (wird in der php.ini eingestellt) nicht ausreicht.
Gruß Rainer