Jo: Datenbank zwischen 2 Servern driekt kopieren

Hallo Leute,
in einigen Berichten habe ich bereits gelesen, dass man zB. mit PHPMyAdmin einen MySQL Dump erstellen kann, den runterladen, und am anderen Server wieder "importieren" kann.

Soweit ist es mir klar wie das Funktioniert.

Blöderweise habe ich jetzt eine Datenbank, die 6 GBytes an Daten umfasst. Gibt es auch eine Möglichkeit einen PHPMyAdmin-Dump direkt auf einen anderen Server zu kopieren?

Mir würde schon helfen, wenn ich den Dump am eigenen Server in ein FTP-Verzeichnis kopieren könnte, weil dann könnte ich den Dump mit FXP von Server zu Server direkt kopieren. Bei letzterer Methode müsste ich allerdings dann auch wissen, wie ich den Dump dann vom Server direkt wieder direkt von diesen Server aus importieren kann ;)

Es wäre alles einfacher, wenn ich vom "Ursprungsserver" die Root-Rechte hätte, aber die hab ich nicht, so kann ich die Datenbank auch nicht direkt kopieren *snief*verzweifel*

Herzlichen Dank für Eure Tipps,
Grüße
Jo

  1. Hello,

    wenn Du eine MySQL-Datenbank hast und es Dir möglich ist, den MySQL-Deamon herunterzufahren, oder zumindest die Datenbank zu Locken und ein Flush auszuüben, dann könntest Du die Tabellen (zumindst bei MyISAM-Format) einfach kopieren.

    Alle Tabellen der Datenbank locken
    Alle Buffers flushen
    Tarball anlegen

    Remote-Login von neuen Server auf den alten
    Mittels ftp den taball rüberziehen
    auspacken

    Was verlorengeht, sind die Rechte auf die Tabellen, denn die stehen in ja in der MySQL-Tabelle des ersten Severs.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. Moin!

    Informiere Dich über den Befehl "mysqldump". Lasse mit diesem die Datentabellen in eine Datei "dumpen", zippe diese mit gzip und lade sie per ftp vom Server herunter.

    Info:http://dev.mysql.com/doc/mysql/de/mysqldump.html

    Wenn Du keinen Shell- Zugang hast: Führe den mysqldump - Befehl innerhalb von PHP aus:
    Info: http://de3.php.net/manual/de/function.exec.php

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  3. 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