2015-08-10 38 views
10

Ho due database, uno a Londra e uno a Dublino. Come posso avere una visione completa dei dati in un database cloud? Supponiamo che la struttura del database mi consenta di utilizzare più sedi in modo tale che non ci siano collisioni.Sincronizzare i database MySQL locali con un database cloud

Replication

EDIT: Tutte le modifiche nei database sono fatte a livello locale. Per esempio: diciamo che ho un sensore a Dublino che scarica i dati sul database di Dublino e un altro sensore a Londra che scarica i dati raccolti nel database di Londra. Come posso ottenere una vista federata di questi dati nel mio database cloud? Da un'interfaccia di amministrazione voglio interrogare il database del cloud, non gli altri.

risposta

2

È possibile definire FEDERATED tabelle nel database "nuvola": qualsiasi domanda su queste tabelle verranno trasmessi dal server "cloud" per il server di Londra/Dublino rilevanti tramite il protocollo client MySQL (si noti che i dati non è copiati sul server "cloud", in modo che non prevede alcuna forma di servizio di backup):

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'; 

si potrebbe quindi definire un VIEW che comprende l'UNION di tali tabelle federate. Purtroppo però, UNION vista non sono né inseribile né aggiornabile-quindi se avete bisogno di commettere eventuali modifiche dei dati che avrebbe dovuto operare sul sottostante (federata) tabella:

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

deve avere il prefisso nelle definizioni di tabella? fastidioso. – zinking

+0

@zinking: ha importanza, quando il codice dell'applicazione può usare semplicemente "VISTA"? – eggyal

+0

sembra che tu debba avere 2 script di creazione di tabelle leggermente diversi. – zinking

5

Piano A: Galera grappolo (come si trova in MariaDB) che include i 3 server.

Piano B: "Replica multi-sorgente" in cui i due server fisici sono Masters e il server Cloud è lo Slave. Di nuovo, richiede MariaDB. (Vedere la risposta di DBHash.)

2

Presto è utile anche qui.

è possibile distribuire presto sul cloud machine, utilizzando connettori mysql connettersi a diversi database geografici, creare diversi schemi di catalogo.

scrivere query per combinare i risultati di entrambi i database. qualcosa di simile:

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

Some Random Links on this

2

hanno due webservices per ogni posizione del database. I servizi Web interrogano i rispettivi database su un intervallo periodico e inseriscono i dati nel database cloud.

+0

Una soluzione su misura funziona sempre. Tuttavia, stava pensando che potrebbe esserci una soluzione off-the-self. – Andrei

0

È possibile impostare la replica impostando il server cloud/database come master e i database in altre posizioni come slave, quindi tutti i dati aggiunti al master verranno replicati allo slave.

È anche possibile impostare un ritardo nella replica se non si desidera che i dati vengano immediatamente replicati allo slave.

In alternativa è possibile utilizzare SQLyog, in cui è possibile connettersi al server MySQL/MariaDB (o qualsiasi fork di MySQL) e sincronizzare i dati tra il database del cloud e il database in altre posizioni. Permette di sincronizzare la sincronizzazione immediatamente o in un secondo momento. Se il server è ospitato in remoto, sarebbe meglio connettersi tramite SSH utilizzando l'autenticazione basata su chiave per maggiore sicurezza.