Datenbank Abgleich zwischen zwei Servern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbank Abgleich zwischen zwei Servern

    Hi alle!

    Ich möchte per Cronjob gerne zwei Datenbank-Tabellen synchronisieren.
    Das habe ich bisher so gemacht:
    Auf Server a werden in Tabelle xyz die Datensätze immer geändert (und als "submit" = 1 gesetzt) und dann alle 5 minuten an Server b übertragen (also alle mit submit = 1) via file_get_contents(http://serverb/empfangs-script.php?passwort=x&feld1[]=1&feld2[]=2&feld3=3) etc.

    leider hat sich herausgestellt, dass das sehr unzuverlässig läuft.

    Habt ihr irgendwelche Ideen, wie das zuverlässiger laufen könnte?
    Habe auch schon daran gedacht, die Daten per FTP rüberzuschieben...

    MfG
    Stefan

  • #2
    Re: Datenbank Abgleich zwischen zwei Servern

    Original geschrieben von stefuNz
    leider hat sich herausgestellt, dass das sehr unzuverlässig läuft.
    das glaube ich dir bei dem gegurke gerne
    Original geschrieben von stefuNz
    Habt ihr irgendwelche Ideen, wie das zuverlässiger laufen könnte?
    http://dev.mysql.com/doc/refman/5.0/en/replication.html

    Kommentar


    • #3
      ok danke für den hinweis und für das lob fürs gegurke

      Scale-out solutions - spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server.
      leider habe ich vergessen zu erwähnen, dass neue datensätze grundsätzlich nur von server b kommen (oder server c,d,e und f).
      also ich hab ne ganze server farm mit jeweils einer datenbank und von dieser datenbank soll die tabelle x auf server a "repliziert" werden ... scheint mir so als würde das nicht gehen mit mysql replication!?
      und die server sind echte unterschiedliche server, also meistens mit dem mysql host localhost!

      noch irgendwelche ideen?

      Kommentar


      • #4
        Original geschrieben von stefuNz
        Auf Server a werden in Tabelle xyz die Datensätze immer geändert ... und dann alle 5 minuten an Server b übertragen
        leider habe ich vergessen zu erwähnen, dass neue datensätze grundsätzlich nur von server b kommen ... und von dieser datenbank soll die tabelle x auf server a "repliziert" werden
        Soweit bin ich mitgekommen:
        Du hast einen Zielserver Z und n Quellserver Q1 bis Qn.
        Auf allen Servern gibt es eine Tabelle t. (siehe f)
        Auf einem ausgezeichneten Qx - und nur dort - werden neue Daten von einer lokalen Applikation in t geschrieben. (siehe e)
        t muß von Qx nach Z repliziert werden - 1 nach 1. (siehe c)
        Auf Z werden die Daten in t manipuliert.
        t muß von Z auf alle Q* repliziert werden - 1 nach n.

        Offene Fragen:
        a) Werden auf irgendeinem Q* Daten auch manipuliert?
        b) Falls a), müssen die Daten dann auch nach Z repliziert werden?
        c) Wie zeitkritisch ist die Sache (5 Minuten-Cron oder lieber sofort)?
        d) Über welche Datenmengen reden wir eigentlich?
        e) Ist x immer gleich, kommen neue Daten immer vom selben Qx?
        f) Gibt es auf Z nur eine Tabelle oder n, also für jedes Q* eine eigene?
        Zuletzt geändert von onemorenerd; 19.12.2007, 16:06.

        Kommentar


        • #5
          also ich hab ne ganze server farm mit jeweils einer datenbank und von dieser datenbank soll die tabelle x auf server a "repliziert" werden ... scheint mir so als würde das nicht gehen mit mysql replication!?
          Solange Du sicherstellst, dass Veränderungen der Tabelle x immer nur auf dem gleichen Quellserver ausgeführt werden, kannst Du die Tabelle auf beliebig viele Server replizieren. Du musst den Servern nur unterschiedliche IDs geben und jeweis in der my.in festlegen, welche Datenbanken/Tabelle(n) repliziert werden sollen.

          Warum machst Du es Dir unnötig schwer und änderst die Tabelle auf verschiedenen Servern (so hab ich es jedenfalls verstanden)
          Du musst eben als Host jeweils auf allen Server den Quellserver b angeben.
          Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            Offene Fragen:
            a) Werden auf irgendeinem Q* Daten auch manipuliert?
            b) Falls a), müssen die Daten dann auch nach Z repliziert werden?
            c) Wie zeitkritisch ist die Sache (5 Minuten-Cron oder lieber sofort)?
            d) Über welche Datenmengen reden wir eigentlich?
            e) Ist x immer gleich, kommen neue Daten immer vom selben Qx?
            f) Gibt es auf Z nur eine Tabelle oder n, also für jedes Q* eine eigene?
            zu a) Ja. Sowohl anfangs per INSERT (wenn sich ein User registriert), als auch per UPDATE (wenn sich ein User aktiviert)
            zu b) Ja unbedingt.
            zu c) 5 min Cron reicht
            zu d) Das sind Kilobyte-Größen
            zu e) neue Daten kommen von verschiedenen Qx Servern
            zu f) Nein, nicht für jedes Qx eine eigene, das soll alles in genau eine Tabelle...

            Gibt's da nicht ne zuverlässige Alternative zur Replikation?
            Habe mir mal n paar Tutorials durch gelesen, um wenigstens mal n bisschen zu kapieren wodrum es da geht ...

            Kommentar


            • #7
              Replikation ist als eingebautes Feature bestimmt am zuverlässigsten.
              Deine Angaben sprechen auch sehr deutlich für Replikation. Du musst nur deine Applikation so umstricken, dass du nicht mehr many-to-many replizieren mußt. Das ist nämlich schon aus theoretischer Sicht nicht ohne und kein mir bekanntes DBMS beherrscht es.
              Deshalb wirst du auch keine externe Lösung finden, die nebenwirkungsfreie many-to-many-Replikation beherrscht.

              Schau dir mal den NDB-Typ von MySQL an!

              Kommentar

              Lädt...
              X