MySQL-Datenbanksynchronisation zwischen zwei Datenbanken

81

Wir führen eine Java PoS-Anwendung (Point of Sale) in verschiedenen Shops mit einem MySql-Backend aus. Ich möchte die Datenbanken in den Shops mit einer Datenbank auf einem Hostserver synchronisieren.

Wenn einige Änderungen in einem Shop vorgenommen werden, sollten sie auf dem Hostserver aktualisiert werden. Wie erreiche ich das?

Peedee
quelle
10
MySQL-Replikation: dev.mysql.com/doc/refman/5.0/en/replication.html
Buch des Zeus
Ist es einfach, es zu tun? Wie lange wird es wohl dauern?
Peedee
2
@peedee MySQL-Replikation ist ziemlich einfach einzurichten. Ein paar Befehle und eine erste Synchronisation. Ich habe beim ersten Mal ungefähr 30 Minuten gebraucht.
Ceejayoz
2
Punkt auf gute Frage fragte sich das gleiche für den gleichen Zweck]
CodefreaK
Sie können entweder die MySQL-Replikationsfunktion verwenden oder es stehen einige Tools zur Datenbanksynchronisierung zur Verfügung. Diese sind hier aufgelistet. Stackoverflow.com/questions/52583/…
Peter Venderberghe

Antworten:

60

Die Replikation ist nicht sehr schwer zu erstellen.

Hier sind einige gute Tutorials:

http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-database-replication/

http://www.ghacks.net/2009/04/09/set-up-mysql-database-replication/

http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

http://www.lassosoft.com/Beginners-Guide-to-MySQL-Replication

Hier einige einfache Regeln, die Sie beachten müssen (es gibt natürlich noch mehr, aber das ist das Hauptkonzept):

  1. Richten Sie 1 Server (Master) zum Schreiben von Daten ein.
  2. Richten Sie einen oder mehrere Server (Slaves) zum Lesen von Daten ein.

Auf diese Weise vermeiden Sie Fehler.

Beispiel: Wenn Ihr Skript sowohl auf dem Master als auch auf dem Slave in dieselben Tabellen eingefügt wird, liegt ein doppelter Primärschlüsselkonflikt vor.

Sie können den "Slave" als "Backup" -Server anzeigen, der dieselben Informationen wie der Master enthält, jedoch keine Daten direkt hinzufügen kann. Befolgen Sie nur die Anweisungen des Master-Servers.

HINWEIS: Natürlich können Sie vom Master lesen und auf den Slave schreiben, aber stellen Sie sicher, dass Sie nicht in dieselben Tabellen schreiben (Master zu Slave und Slave zu Master).

Ich würde empfehlen, Ihre Server zu überwachen, um sicherzustellen, dass alles in Ordnung ist.

Lassen Sie mich wissen, wenn Sie zusätzliche Hilfe benötigen

Buch des Zeus
quelle
Ja, Shop = Master, Server = Slave
Buch des Zeus
Ich habe jetzt den Master konfiguriert und werde eine Verbindung zu einer Slave-Datenbank herstellen. Wenn ich dies tue, werden alle Änderungen am Master im Slave und Änderungen im Slave auch im Master angezeigt.
Peedee
ja sofort wenn das setup gut ist! Sie können einen Datensatz in den Master einfügen und im zu testenden Slave eine Auswahl treffen. Wenn dieser Pass, sind Sie bereit!
Buch des Zeus
Hey Kumpel ... Ich habe Fehler 1045 auf dem Sklaven. Was wäre der Grund dafür? Hast du eine Idee?
Peedee
FEHLER 1045: Zugriff für Benutzer verweigert: 'root @ localhost' (Verwenden des Passworts: NO) und dev.mysql.com/doc/refman/5.1/en/access-denied.html
Book Of Zeus
23

drei verschiedene Ansätze:

  1. Klassischer Client / Server-Ansatz: Stellen Sie keine Datenbank in die Shops. Lassen Sie die Anwendungen einfach auf Ihren Server zugreifen. Natürlich ist es besser, wenn Sie ein VPN einrichten, aber es ist sinnvoll, die Verbindung einfach in SSL oder ssh zu verpacken. Pro: So wurden Datenbanken ursprünglich gedacht. Con: Wenn Sie eine hohe Latenz haben und komplexe Vorgänge langsam werden können, müssen Sie möglicherweise gespeicherte Prozeduren verwenden, um die Anzahl der Roundtrips zu verringern.

  2. replizierter Master / Master: wie von @Book Of Zeus vorgeschlagen. Nachteile: Die Einrichtung ist etwas komplexer (insbesondere wenn Sie mehrere Geschäfte haben). Das Einfahren eines Geschäftsautomaten kann möglicherweise das gesamte System gefährden. Vorteile: Bessere Reaktionsfähigkeit, da Lesevorgänge vollständig lokal sind und Schreibvorgänge asynchron weitergegeben werden.

  3. Offline-Vorgänge + Synchronisierungsschritt: Alle Arbeiten werden lokal ausgeführt und von Zeit zu Zeit (möglicherweise einmal pro Stunde, täglich, wöchentlich usw.) eine Zusammenfassung mit allen neuen / geänderten Datensätzen aus dem letzten Synchronisierungsvorgang erstellt und an den Server gesendet. Vorteile: Kann ohne Netzwerk arbeiten, schnell, einfach zu überprüfen (ob die Zusammenfassung lesbar ist). Nachteile: Sie haben keine Echtzeitinformationen.

Javier
quelle
10
Ich muss die 3. Art der Datenbank-Synchronisierung einrichten (Offline-Operationen + Synchronisierung) und würde gerne mehr darüber lesen. Nicht in der Lage, dieses zu googeln. Ist es ein Buch / Artikel, auf den ich mich beziehen kann?
Abhishek77in
10

SymmetricDS ist die Antwort. Es unterstützt mehrere Teilnehmer mit einer Richtung oder einer bidirektionalen asynchronen Datenreplikation. Es verwendet Web- und Datenbanktechnologien, um Tabellen zwischen relationalen Datenbanken nahezu auf Wunsch in Echtzeit zu replizieren.

Umfassende und robuste Java-API für Ihre Anforderungen.

Komoo
quelle
Wenn ich einen internen Server mit separater Datenbank in einem Bereich ohne Internet habe und Online-Käufer auf einer im Internet gehosteten Datenbank habe und die internen Datenbankkäufe in Live migrieren möchte, können Sie bitte mitteilen, was mit automatischen Inkrementen zwischen zwei geschehen wird Wenn beide den gleichen Ausweis reservieren würden, wäre das chaotisch, oder? Also (ich muss Operationen, die an der internen Datenbank durchgeführt wurden, mit Live synchronisieren, ohne die automatische Inkrementierung der IDs und die Beziehungen zwischen Tabellen zu beeinflussen)
shareef
3

Schauen Sie sich die Tools zum Schema- und Datenvergleich in dbForge Studio für MySQL an. Mit diesem Tool können Sie vergleichen, die Unterschiede erkennen, ein Synchronisationsskript erstellen und zwei Datenbanken synchronisieren.

Devart
quelle