2015-08-10 10 views
10

Ich habe zwei Datenbanken, eine in London und eine in Dublin. Wie kann ich die Daten in einer Cloud-Datenbank vollständig anzeigen? Angenommen, die Datenbankstruktur ermöglicht es mir, mehrere Standorte zu verwenden, sodass keine Kollisionen auftreten.Synchronisieren Sie lokale MySQL-Datenbanken mit einer Cloud-Datenbank

Replication

EDIT: Alle Änderungen in den Datenbanken lokal erfolgen. Zum Beispiel: Sagen wir, ich habe einen Sensor in Dublin, der die Daten in der Dublin-Datenbank ablegt, und einen anderen Sensor in London, der seine gesammelten Daten in der Londoner Datenbank ablegt. Wie bekomme ich eine Verbundansicht dieser Daten in meiner Cloud-Datenbank? Von einer Admin-Schnittstelle möchte ich die Cloud-Datenbank abfragen, nicht die anderen.

Antwort

2

Sie können FEDERATED Tabellen in der „Wolke“ Datenbank definieren: alle Anfragen zu diesen Tabellen aus der „Wolke“ Server auf den entsprechenden London/Dublin-Server über das MySQL-Client-Protokoll übertragen werden (dh Daten nicht der Fall beachten auf die „Wolke“ Server kopiert, so dass es keine Form von Backup-Dienst bereitstellt):

CREATE SERVER london FOREIGN DATA WRAPPER mysql OPTIONS (
    HOST 'london.mysql.example.com', 
    PORT 9306, 
    USER 'cloud_db_user', 
    PASSWORD '...', 
    DATABASE 'my_database' 
); 

CREATE SERVER dublin FOREIGN DATA WRAPPER mysql OPTIONS (
    HOST 'dublin.mysql.example.com', 
    PORT 9306, 
    USER 'cloud_db_user', 
    PASSWORD '...', 
    DATABASE 'my_database' 
); 

CREATE TABLE london_table (
    -- table definition as normal 
) 
ENGINE=FEDERATED 
CONNECTION='london/original_table'; 

CREATE TABLE dublin_table (
    -- table definition as normal 
) 
ENGINE=FEDERATED 
CONNECTION='dublin/original_table'; 

Sie könnten dann eine VIEW definieren, die die UNION dieser föderierte Tabellen enthält. Leider sind jedoch UNION Ansichten weder einsetzbar noch aktualisierbar-so, wenn Sie Änderungen an den Daten verpflichten, bräuchten Sie auf der zugrunde liegenden (föderierten) Tabelle arbeiten müssen:

CREATE VIEW combined AS 
    SELECT * FROM london_table 
UNION ALL 
    SELECT * FROM dublin_table; 
+0

muss es das Präfix in den Tabellendefinitionen haben? nervig. – zinking

+0

@zinking: Ist es wichtig, wenn Ihr Anwendungscode nur die 'VIEW' verwendet? – eggyal

+0

klingt, als müssten Sie zwei leicht unterschiedliche Tabellenerstellungsskripte haben. – zinking

5

Plan A: Galera Cluster (wie in MariaDB gefunden), dass die 3-Server umfasst.

Plan B: "Multi-Source-Replikation" wobei Ihre zwei physischen Server Master und der Cloud-Server der Slave ist. Auch hier benötigt MariaDB. (Siehe DBHashs Antwort.)

2

Presto ist auch hier nützlich.

Sie können Presto auf der Cloud-Maschine bereitstellen, mysql-Konnektoren verwenden, mit verschiedenen Geodatenbanken verbinden, verschiedene Katalogschemas erstellen.

Schreiben Sie Abfragen, um Ergebnisse aus beiden Datenbanken zu kombinieren. so etwas wie:

select * from dublin.A 
union all 
select * from london.A 

Some Random Links on this

2

haben zwei Web Service für jede Datenbank Lage. Die Webservices befragen die jeweiligen Datenbanken periodisch und fügen die Daten in die Cloud-Datenbank ein.

+0

Eine maßgeschneiderte Lösung funktioniert immer. War jedoch der Meinung, dass es eine Selbst-Lösung geben könnte. – Andrei

0

Sie können die Replikation einrichten, indem Sie den Cloud-Server/die Datenbank als Master und die Datenbanken an anderen Standorten als Slave festlegen, sodass alle zum Master hinzugefügten Daten zum Slave repliziert werden.

Sie können auch eine Verzögerung bei der Replikation einrichten, wenn Sie nicht möchten, dass die Daten sofort auf den Slave repliziert werden.

Alternativ können Sie SQLyog verwenden, wo Sie eine Verbindung zu Ihrem MySQL/MariaDB-Server (oder einer beliebigen MySQL-Gabel) herstellen und die Daten zwischen der Cloud-Datenbank und der Datenbank an anderen Standorten synchronisieren können. Dadurch kann die Synchronisierung sofort oder zu einem späteren Zeitpunkt geplant werden. Wenn Ihr Server remote gehostet wird, wäre es besser, sich mit SSH zu verbinden, indem Sie für mehr Sicherheit eine schlüsselbasierte Authentifizierung verwenden.