Claudia: MySQL Daten zwischen 2 Datenbanken kopieren

Hallo !

ich habe 2 identische Datenbanken auf 2 unterschiedlichen Servern.

Wie kann ich mit dem geringsten Aufwand per PHP die Daten von A nach B kopieren? Tabellendefinitionen sind natürlich identisch.

Ein User mit externem Zugriff ist vorhanden. Gibt es einen schnelleren intelligenteren Weg als SELECT * mit Schleife und einzelnen manuell gebauten Insert Statements?

Viele Grüße
Claudia

  1. Hi!

    ich habe 2 identische Datenbanken auf 2 unterschiedlichen Servern.
    Wie kann ich mit dem geringsten Aufwand per PHP die Daten von A nach B kopieren?

    Für den geringsten Aufwand musst du die FEDERATED Storage Engine nutzen können. Die tut so, als ob eine ferne Tabelle lokal vorhanden wäre. Dann dürfte INSERT ... SELECT ... weiterhelfen

    Replikation wäre auch noch eine Möglichkeit, aber das läuft automatisch und PHP ist außen vor.

    Vermutlich wird beides für dich nicht verwendbar sein. Da du aber nicht schreibst, welche Zugriffsmöglichkeiten du für die beiden Server hast, kann ich anhand des Stichworts PHP nur raten, dass sie nicht über die üblichen Berechtigungen bei Hostern hinausgehen. Dann bliebe nur die Einzeldatenübernahme, bei der man sich wenigstens durch die Verwendung von Prepared Statements das Zusammenbauen der INSERTs sparen kann.

    Lo!

    1. hi !
      danke für die infos .. das mit der federated storage engine höre ich heute zum ersten mal. sehr interessant. leider bei dem provider nicht verfügbar.

      da werde ich wohl "von hand" coden müssen :(

      an zugriffsmöglichkeiten habe ich ssh, ftp, php, db-user mit externem zugriff auf den mysqlserver. mal kucken was ich daraus mache.

      vielen dank für deine tipps ..

      1. Hi!

        an zugriffsmöglichkeiten habe ich ssh, ftp, php, db-user mit externem zugriff auf den mysqlserver. mal kucken was ich daraus mache.

        Dann schau mal in Richtung mysqldump.

        Lo!

      2. Hello,

        danke für die infos .. das mit der federated storage engine höre ich heute zum ersten mal. sehr interessant. leider bei dem provider nicht verfügbar.

        da werde ich wohl "von hand" coden müssen :(

        an zugriffsmöglichkeiten habe ich ssh, ftp, php, db-user mit externem zugriff auf den mysqlserver. mal kucken was ich daraus mache.

        Wenn Du ISAM als Storage Engine benutzt, brauchst Du nur alle Files aus dem Data-Verzeichnis von Sever_1 in das Data-Verzeichnis von Server_2 zu kopieren. Aber selbstverständlich vorher beide Server flushen und herunterfahren.

        Wenn der Transfer von Server_1 zu Server_2 zu lange dauert (Offtime der Datenbank), dann fahre Server_1 kurz runter, kopiere alle betroffneen Files lokal in ein eigenens Verzeichnis (die ganze Struktur kopieren), fahre dann den Server_1 wieder hoch, baue einen TarBall aus den gesicherten Daten, Zippe ihn und übertrage ihn erst dann. Das spart bei MySQL-Datanbanken bis zu 90% der Übertragungszeit und verkürzt daankl der lokalen Kopie die Offtime auf ein Minimum.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Tach,

          Wenn Du ISAM als Storage Engine benutzt, brauchst Du nur alle Files aus dem Data-Verzeichnis von Sever_1 in das Data-Verzeichnis von Server_2 zu kopieren. Aber selbstverständlich vorher beide Server flushen und herunterfahren.

          das selbe Prinzip funktioniert auch mit InnoDB.

          mfg
          Woodfighter

          1. Hello Jens,

            Wenn Du ISAM als Storage Engine benutzt, brauchst Du nur alle Files aus dem Data-Verzeichnis von Sever_1 in das Data-Verzeichnis von Server_2 zu kopieren. Aber selbstverständlich vorher beide Server flushen und herunterfahren.

            das selbe Prinzip funktioniert auch mit InnoDB.

            Danke. Da war ich mir nicht sicher, da InnoDB ja wohl eher einen Monolithen anlegt, oder? Da ist mir immer nicht klar, ob sein Dienst trotzdem auf dem Filesystem aufsetzt, oder ins Filesystem eingreift. Es gab da wohl auch DBn, die man leider nicht einfach so kopieren konnte...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
        2. Hi!

          Wenn Du ISAM als Storage Engine benutzt, brauchst Du nur alle Files aus dem Data-Verzeichnis von Sever_1 in das Data-Verzeichnis von Server_2 zu kopieren. Aber selbstverständlich vorher beide Server flushen und herunterfahren.

          Muss man nicht, es gibt mysqlhotcopy.

          Aber ich denke mal, dass dieser Art Vorhaben alle nicht für sie geeignet sind, wegen:

          an zugriffsmöglichkeiten habe ich [...] db-user mit externem zugriff auf den mysqlserver [...]

          Lo!

  2. Ist phpmyadmin vorhanden? Damit kannst du dir ein INSERT Script erzeugen lassen, ist glaub ich unter Backup irgendwo.

    1. Ist phpmyadmin vorhanden? Damit kannst du dir ein INSERT Script erzeugen lassen, ist glaub ich unter Backup irgendwo.

      Danke! ... ich meinte allerdings eine vollautomatische Übernahme. Muss ich selbst coden :)

  3. Hello Claudia,

    ich habe 2 identische Datenbanken auf 2 unterschiedlichen Servern.

    Wie kann ich mit dem geringsten Aufwand per PHP die Daten von A nach B kopieren? Tabellendefinitionen sind natürlich identisch.

    Ein User mit externem Zugriff ist vorhanden. Gibt es einen schnelleren intelligenteren Weg als SELECT * mit Schleife und einzelnen manuell gebauten Insert Statements?

    Es soll also für den ständigen laufenden Betrieb sein?
    Ist immer einer der Work- und einer der Backup-Server?
    Oder wird auch noch auf beiden Datenbanken separat gearbeitet?

    Am einfachsten und saubersten ist es dann, alle Statements (in der Applikation) mitzuschreiben und dann dieses Transaktions-Log beim Backup-Server ebenfalls abzuarbeiten. Damit sollten bei gelichen Ausgangsbedingungen auch immer die Datenbestände übereinstimmen.

    Aber dazu müssen auch alle Nebenläufigkeitsprobleme und TOCTTOU-Fallen beseitigt sein. Wenn nämlich ein Statement auf Server_1 failt und du das nicht merkst und es dann auf Server_2 ordentlich durchläuft (oder umgekehrt), dann ist die K.... am Dampfen ~~~

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de