Steffen Richter: Datenbanken abgleichen

Hallo Zusammen!

Ist es möglich 2 MySQL Datenbanken abzugleichen.
Ich habe eine MySQL Datenbank im Internet. Diese möchte ich mit meiner im lokalen Netz laufenden Datenbank abgleichen. Ist das überhaupt bzw. mit PHP möglich?

Gruß
Steffen

  1. Hi,

    Ist es möglich 2 MySQL Datenbanken abzugleichen.
    Ich habe eine MySQL Datenbank im Internet. Diese möchte ich mit meiner im lokalen Netz laufenden Datenbank abgleichen. Ist das überhaupt bzw. mit PHP möglich?

    Du willst sowas wie eine DB-Replikation mit SQL von MySQL schreiben. Das ist moeglich.

    Gruss,
    Ludger

    1. Hi!

      Es sind 2 MySQL Datenbanken. Aber das sollte ja irrelevant sein. Mein Problem ist, das ich auf die externe Datenbank nur von localhost zugreifen kann. Daher weiß ich nicht, wie ich vom lokalen Netz abgleichen kann.

      Gruß
      steffen

      1. Hi,

        Es sind 2 MySQL Datenbanken. Aber das sollte ja irrelevant sein. Mein Problem ist, das ich auf die externe Datenbank nur von localhost zugreifen kann. Daher weiß ich nicht, wie ich vom lokalen Netz abgleichen kann.

        kannst Du das bitte noch einmal - fuer die ganz Doofen - in anderen Worten beschreiben? Was geht warum nicht (und wieso natuerlich)?

        Gruss,
        Ludger

  2. echo $begrueszung;

    Ist es möglich 2 MySQL Datenbanken abzugleichen.

    Sicher.

    Ich habe eine MySQL Datenbank im Internet. Diese möchte ich mit meiner im lokalen Netz laufenden Datenbank abgleichen. Ist das überhaupt bzw. mit PHP möglich?

    Die verwendete Programmiersprache ist dabei nicht wirklich relevant. Mit PHP könnte es insofern Probleme geben, als dass das Script wegen zu viel Daten und damit zu langer Laufzeit durch ein Timeout abgebrochen werden könnte. Aber daran ist ja nicht die Sprache an sich Schuld. :-)

    Nehmen wir mal an, dass der Datenabgleich in nur einer Richtung stattfindet, vom Web nach lokal.

    Du brauchst ein Kriterium, dass anzeigt, wann sich ein Datensatz geändert hat. Ein timestamp, der bei jeder Änderung aktualisiert wird, ist dafür geeignet. Und jeder Datensatz muss einen eindeutigen Schlüssel (primary key) haben.

    Dann brauchst du einen Webservice, sprich auf dem fernen Webserver muss ein Script die geänderten Daten in eine geeignete Form bringen, die du lokal wieder zurücklesen kannst (PHP's serialize()/unserialize(), WDDX, XML, XMLRPC, SOAP, ...[1]). Als Parameter müsste der Zeitpunkt des letzten Abgleichs angegeben werden. Das Script liefert daraufhin die Daten mit timestamp > letzter Abgleich.

    Und du brauchst lokal ein eigenständiges Programm oder ein Script, dass sich zum einen merkt, wann der letzte Abgleich war und dann den Webservice nach geänderten Daten befragt, und die in der lokalen DB einträgt oder ändert.

    Wenn der Abgleich bidirektional stattfinden soll, dann wird es schwieriger, weil in der Zeit zwischen zwei Abgleichungen die eine DB nicht weiß, welche Schlüssel die andere vergibt. Du kannst zwar einen eindeutigen Bezeichner zum Schlüssel hinzufügen, müsstest dich dann aber um die Schlüssel-Generierung selbst kümmern, auto_increment reicht da nicht mehr.

    echo "$verabschiedung $name";

    [1] XMLRPC und SOAP beinhalten nicht nur das Ver- und Auspacken der Daten, sondern auch gleich noch die Übertragung. Wenn du dich dafür entscheidest, müsstest du damit einen "richtigen" Webservice aufbauen.

    1. Hi,

      sorry, das hat exakt nichts mit SOAP, XML und web services zu tun, das ist eher Datenmanipulation mit ANSI SQL 92 oder so.

      Gruss,
      Ludger

      1. echo $begrueszung;

        sorry, das hat exakt nichts mit SOAP, XML und web services zu tun, das ist eher Datenmanipulation mit ANSI SQL 92 oder so.

        Ach... und wie willst du mit "ANSI SQL 92 oder so" die Verbindung zwischen dem externen und dem lokalen Server herstellen?

        echo "$verabschiedung $name";

        1. Hi,

          sorry, das hat exakt nichts mit SOAP, XML und web services zu tun, das ist eher Datenmanipulation mit ANSI SQL 92 oder so.

          Ach... und wie willst du mit "ANSI SQL 92 oder so" die Verbindung zwischen dem externen und dem lokalen Server herstellen?

          nun, vorausgesetzt, die direkte Verbindung zwischen beiden Servern ist wirklich nicht gegeben, dann wuerde ich mal schauen, ob es irgendwo einen Ort gibt, von dem ich auf beide Datenserver zugreifen kann. Ist auch da nicht moeglich, dann wuerde ich versuchen irgendwie ein Script an den Start zu bringen, der eine Erreichbarkeit des Datenservers bspw. per Perlscript oder PHP-Script (entsprechende zu Fuss gebaute Authentifizierung vorausgesetzt) durch das UI ermoeglicht.

          Dann wuerde ich weiterschauen. Ob ich Batch-Jobs fuer das o.g. Script schreibe oder so.

          Gruss,
          Ludger

          1. echo $begrueszung;

            nun, vorausgesetzt, die direkte Verbindung zwischen beiden Servern ist wirklich nicht gegeben,

            Davon war gemäß https://forum.selfhtml.org/?t=104879&m=647215 auszugehen.

            dann wuerde ich mal schauen, ob es irgendwo einen Ort gibt, von dem ich auf beide Datenserver zugreifen kann.

            Davon gehe ich nicht aus. Im Rechenzentrum des Hosters hat man zwar Zugriff auf die DB, jedoch wird dann die andere Richtung nicht offen sein. Sei es durch eine nicht ständig bestehende Verbindung zwischen lokaler Maschine und dem Netz oder durch irgend eine Abschottungstechnik, die den Zugriff auf die lokale DB von außen verhindert.

            Ist auch da nicht moeglich, dann wuerde ich versuchen irgendwie ein Script an den Start zu bringen, der eine Erreichbarkeit des Datenservers bspw. per Perlscript oder PHP-Script (entsprechende zu Fuss gebaute Authentifizierung vorausgesetzt) durch das UI ermoeglicht.

            Dies entspricht dem Funktionsprinzip eines Webservices.

            echo "$verabschiedung $name";

            1. Hi,

              Ist auch da nicht moeglich, dann wuerde ich versuchen irgendwie ein Script an den Start zu bringen, der eine Erreichbarkeit des Datenservers bspw. per Perlscript oder PHP-Script (entsprechende zu Fuss gebaute Authentifizierung vorausgesetzt) durch das UI ermoeglicht.

              Dies entspricht dem Funktionsprinzip eines Webservices.

              eher nicht. Waere eher ein DB Admintool, also ein UI.

              Gruss,
              Ludger

              1. echo $begrueszung;

                Ist auch da nicht moeglich, dann wuerde ich versuchen irgendwie ein Script an den Start zu bringen, der eine Erreichbarkeit des Datenservers bspw. per Perlscript oder PHP-Script (entsprechende zu Fuss gebaute Authentifizierung vorausgesetzt) durch das UI ermoeglicht.

                Dies entspricht dem Funktionsprinzip eines Webservices.

                eher nicht. Waere eher ein DB Admintool, also ein UI.

                Na gut, dann mal mit "Bild":

                Datenbank---Webserver---Internet-Wolke +++ lokaler Rechner mit DB--[_]...Steffen

                Legende:
                [_] soll Bildschirm und Tastatur darstellen
                --- ständige Verbindung
                +++ nicht ständige Verbindung
                ... keine (elektrische) Verbindung

                Zwischen "Datenbank" und "lokaler Rechner mit DB" soll ein Datenabgleich stattfinden. An welcher Stelle hilft dabei ein UI?

                echo "$verabschiedung $name";

                1. Hi,

                  Datenbank---Webserver---Internet-Wolke +++ lokaler Rechner mit DB--[_]...Steffen

                  Legende:
                  [_] soll Bildschirm und Tastatur darstellen
                  --- ständige Verbindung
                  +++ nicht ständige Verbindung
                  ... keine (elektrische) Verbindung

                  Zwischen "Datenbank" und "lokaler Rechner mit DB" soll ein Datenabgleich stattfinden. An welcher Stelle hilft dabei ein UI?

                  beim Zugriff auf die DB, die hinter )vor ;-) dem ersten Webserver steckt.
                  BTW - was soll '...' wirklich bedeuten?

                  Gruss,
                  Ludger

                  PS: Kernnst Du den M$ Query Analyser, waer doch was fuer den, oder? Oder fuer I-SQL oder so?   ;-)

                  1. echo $begrueszung;

                    Datenbank---Webserver---Internet-Wolke +++ lokaler Rechner mit DB--[_]...Steffen

                    Legende:
                    [_] soll Bildschirm und Tastatur darstellen
                    --- ständige Verbindung
                    +++ nicht ständige Verbindung
                    ... keine (elektrische) Verbindung

                    Zwischen "Datenbank" und "lokaler Rechner mit DB" soll ein Datenabgleich stattfinden. An welcher Stelle hilft dabei ein UI?

                    beim Zugriff auf die DB, die hinter )vor ;-) dem ersten Webserver steckt.

                    Wenn du willst, kannst du da ja ein UI hinsetzen. Ich denke jedoch nicht, dass der OP vorhatte, die Daten händisch abzugleichen.

                    BTW - was soll '...' wirklich bedeuten?

                    Ich weiß nicht, wie es bei Steffen aussieht, aber bei mir ist das im allgemeinen das Medium, das gern als "Luft" bezeichnet wird.
                    Gelegentlich befinden sich auch meine Fingerkuppen auf den Plastenippeln mit den Buchstaben und den anderen komischen Zeichen drauf.

                    PS: Kernnst Du den M$ Query Analyser, waer doch was fuer den, oder? Oder fuer I-SQL oder so?   ;-)

                    So langsam verstehe ich, worauf du hinaus willst. Du suchst eine Beschäftigung. Und sei es auch nur, die Daten aus "Datenbank" am UI von "Webserver" abzufragen und in die DB von Steffens lokalem Rechner einzugeben. Sag das doch gleich...

                    Ich entkerne mir jetzt erstmal eine Banane.

                    echo "$verabschiedung $name";

                    exit();