phpbar.de logo

Mailinglisten-Archive

[php] MySQL Dump ohne Telnet (war: Wichtig! Puretec-Ausfall?)

[php] MySQL Dump ohne Telnet (war: Wichtig! Puretec-Ausfall?)

Ralf Eggert php_(at)_phpcenter.de
Wed, 5 Sep 2001 12:22:09 +0100


Hi Christian,

>Ja aber Puretec hat ein Skriptlimit von 6 Sekunden und da ist meine
>RiesenDB nur zu ca. 10% im Backup...

Dann schreib dir doch ein Skript, mit dem du das Backup splitten
kannst...

Bau dir eine Funktion, an die du Tabellenname, Start Id und einen Limit
Wert uebergibst (z.B. 1.000 oder 10.000). Dann machst du einen
einfachen "SELECT * FROM $tabelle LIMIT $start, $limit" und gehst die
Ergebnismenge Zeile fuer Zeile durch. Pro Zeile haengst du die Werte
dann durch ein Trennzeichen aneinander, wobei du darauf achten
solltest, dass dein Trennzeichen nicht selber in den Werten vorkommt.
Diese Werte-Ketten schreibst du dann in eine Datei, wobei du sogar,
wenn moeglich, gzopen(), gzwrite() und gzclose() verwenden kannst. Am
Ende File schliessen und raus aus der Funktion.

Dann brauchst du nur noch ein Skript, welches die Funktion mit Werten
versorgen kann. Mit einem "SHOW TABLES" erhaeltst du alle Tabellen aus
deiner DB. Durchlaufe die Ergebnismenge mit einer Schleife und hol dir
fuer jede Tabelle die Anzahl aller Eintraege. Dann baust du dir solch
eine Schleife:

  for ($i=0; $i<$count; $i = $i + $limit)
  {
     echo "<A HREF=\"skript.php4?tabelle=" . $tabelle . 
          "&start=" . $i . "\">" . $i . "</A><BR>";
  }

Wobei $tabelle der Name der jeweiligen Tabelle, $count die Anzahl der
Eintraege pro Tabelle und $limit dein festgelegter Wert ist. Beim
Aufruf des Skriptes durch Klick auf einen der Links, pruefst du die
Werte und schickst sie an deine obige Funktion zum partiellen
Downloaden der Datei. Einfach nacheinander auf die einzelnen Links
klicken und jeweils eine einzelne Datei erstellen lassen. Natuerlich
kannst du auch pro Tabelle eine Datei erstellen, je nachdem wie du
willst. Den Limitwert kannst du im Kopf des Skriptes definieren und
anpassen, je nachdem wie viel du abarbeiten kannst, bevor das Skript
abbricht.

Fuer den Upload der Daten bastelst du dir dann einfach ein Skript,
welches aus den Dateien INSERT Statements bastelt, und kannst dann den
Rotz auch lokal wieder hochladen...

Dies laesst sich natuerlich noch erweitern und verbessern, aber
vielleicht hilft es dir ja als Denkanstoss. Du hast damit natuerlich
keinen Mysqldump, den du einfach so wieder einspiele kannst, aber du
kannst deine Funktion ja auch so bauen, dass ein Mysqldump nachgebaut
wird. Ich hatte mir irgend wann auch mal sowas gebastelt und es klappte
vorzueglich. Leider find ich das in meinem momentanen Chaos hier aber
nicht mehr. Sollte aber inkl. Testen in zwei, drei Stunden erledigt
sein und dann hast du mit dem Backup keine Sorgen mehr...

Gruss,

        Ralf

-- 
__________________________________________
 In-Greece.de - die Griechenlandcommunity
_______ http://www.in-greece.de/ _________



php::bar PHP Wiki   -   Listenarchive