Tom: MySQL-Datenbank per PHP-Script übertragen

Beitrag lesen

Hello,

Hmmm... Du lässt die DB einen SQL-Dump machen, der wird dann gezippt und an den anderen Server übertragen, dort nimmt ein anderes Skript den Dump, entzippt ihn und spielt ihn in die DB dort ein?

Dieser Tipp wird Dir aber ggf. nichts nützen, denn der DumpFile bleibt i.d.R dort, wo auch ein Outfile bleiben würde und da kommst Du dann ggf. nicht ran.

Du wirst also wahrscheinlich nur die Chance haben, mittels PHP eine Satzorientierte Datei anzulegen, die dann acuh mit anderen Systmen (z.B. Access) lokal wieder verarbeitet werden kann und die Du in Deinem Webspace ablegen kannst. Von dort kannst Du sie dann ja herunterladen.

Wieviele Daten enthalten denn Deine MySQL-Tabellen?

Das Problem dabei ist nur, dass die Datenbank für die Dauer des Backups gesperrt werden muss, damit später keine Brüche in der refenziellen Integrität bei den gesicherten Daten auftreten.

Da PHP nur sehr umständlich selbstdefinierte Datenstrukturen unterstützt, wird das Kopieren in eine eigne Low-Leve-Datei vermutlich "einfach" nur im Textformat gehen, also alle Felder werden als human readable charcters gespeichert, also Zahlen auch nicht im Binärformat, sondern als ASCII-Ziffern '1234567890'

Du benötigst Dafür das Tabellenformat der MySQL-Tabellen, also die Feldnamen und Feldlängen. Als Feldlänge gilt dabei immer die maximal mögliche des Datentyps, bei VarChar also 256 Zeichen.

Das Format bekommst Du mit

$sql = "show columns from $table";
$ret = mysql_query($sql, $con);

dann sperrst Du die Tabellen mit

$sql = "Lock table AUTO read, FARBE read, HALTER read";

wobei AUTO, FARBE und HALTER natürlich nur meine Tabellennamen in der Übungsdatenbank sind ;-)

Wenn Du dann später fertig bist, solltest Du der Ordnung halber mit einem

$sql = "Unlock tables";

die Tabellen wieder freigeben, obwohl das eigentlich bei Scriptende durch Verfall des Connection-Handles auf die DB automatisch passieren sollte.

Dann holst Du die Datensätze einfach in Portionen ab mit

"select * from $table limit $offset, $anzahl oder by ID";

Wenn es nicht soviele sind, benötigst du die Limit-Klausel nicht.

Mit Hilfe der Funktion

$rec = strpad($feld1,$fieldlen1,'0') +
         strpad($feld2,$fieldlen2,'0') +
         strpad($feld3,$fieldlen3,'0');

kannst Du Dir dann einen Low-Level-Datensatz nach dem anderen zusammenbauen und mit fwrite() einfach in eine Low-Level-Datei speichern. Auf Diese Weise könnte man auch leicht ein dBase-Format erzeugen, wenn Dir das was nützt.

Natürlich kann man das alles mit Arrays und foreach() automatisieren. Dafür haben wir unds ja mit show columns die Daten beschafft.

Die kannst Du dann runterladen.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau