CirTap: Datenbank zwischen 2 Servern driekt kopieren

Beitrag lesen

Hi,

wenn du nicht auf mysqldump zugreifen kannst (darfst), hilft dir da evtl. ein eigener Server-Skript z.B. in PHP

  1. leg in der Zieldatenbank alle Tabelle an, aber erstmal OHNE INDEX-FELDER!! Sonst dauert der Import u.U. zu lange und der Server geht unnötig in die Knie.
    Der "Struktur-Dump" mit CREATE-Table aus phpMyAdmin liefert dir das Zeug dazu. Lösche aber unbedingt alle INDEX und PRIMARY Angaben aus dem SQL script den das Teil erstellt.

  2. Ab PHP 4.2 kannst du gleichzeitig mehrere Verbindungen zu verschiedenen Servern/Datenbanken aufbauen. Dazu gibt's einen neuen "new_link" Parameter, den du auf true setzen musst. Öffne also im Script zu Anfang zwei connections auf die beiden Datenbanken.
    http://php.net/manual/function.mysql-connect.php

  3. in einer Schleife über die Tabellennamen führst du ein
         INSERT INTO db_ziel.tabelleXY SELECT * FROM db_quelle.tabelleXY
    aus um die Daten direkt einzufügen (siehe unten)

  4. wenn alles drin ist, legst du die Indizes in den Zieltabellen entsprechend neu an. Schreib dir ggf. auchd afür einen kleinen Script mit den ALTER TABLE Befehlen. Die Angaben kannst du dir aus dem "CREATE Dumps" von phpMyAdmin rauskopieren

Zu 3)
Die Tabellen kannst du zur Vermeidung von Fehlern auch dynamisch mit
   SHOW TABLES
abfragen und dann über die Ergebnisliste (Array) durchschleifen.

Wichtiger: Bei extrem großen Tabellen (groß ist relativ) kann dir ein Timeout im Skript passieren (muss nicht, kann aber).
Du sollest dann evtl. bei den INSERT...SELECTs mit LIMIT arbeiten und das Häppchenweise importieren, z.B. in 500er Blöcken
... LIMIT 0,500
... LIMIT 501,1000

Viel Erfolg,
CirTap