Come mantenere sincronizzati 2 database scratch
-
08-07-2019 - |
Domanda
La mia domanda è molto simile a questa . Tuttavia, sono su MySQL e cerco la tecnologia "più bassa" soluzione che posso trovare.
La situazione è che ho 2 database che dovrebbero contenere gli stessi dati ma che vengono aggiornati principalmente quando non sono in grado di contattarsi. Ho il sospetto che ci sia una sorta di clustering o cosa master / slave che sarebbe in grado di sincronizzarli bene. Tuttavia, nei miei casi questo è un grosso problema in quanto si tratta solo di un DB scratch per uso personale.
Qual è un buon modo per farlo?
Il mio approccio attuale è quello di avere una tabella federata su una di esse e, di tanto in tanto, riempire i dati sull'altro filo con un insert / select. Diventa un po 'contorto cercando di gestire le chiavi primarie e cosa no. ( insert ignore
sembra non funzionare correttamente)
P.S. Posso facilmente creare una query che seleziona le righe da trasferire.
Soluzione 2
La mia soluzione attuale è
- imposta una tabella federata nella casella di origine che prende la tabella nella casella di destinazione
- imposta una vista nel riquadro di origine che seleziona le righe da aggiornare (come join della tabella federata)
- imposta un'altra tabella federata nel riquadro di destinazione che acquisisce la vista nel riquadro di origine
- rilascia un
INSERT ... SELECT ... ON DUPLICATE UPDATE
sulla casella di destinazione per eseguire il pull.
Suppongo che potrei semplicemente prendere la tabella di origine e fare tutto in una volta, ma in base ai log delle query che ho visto, immagino che finirei con circa 20K query in esecuzione o circa 100-300 MB di trasferimento dati a seconda di come avvengono le cose. La configurazione sopra venduta comporta circa 4 query e un numero di dati trasferito leggermente inferiore a quello effettivamente necessario.
Altri suggerimenti
La replica integrata di MySQL è molto semplice da configurare e funziona bene anche quando i DB sono disconnessi per la maggior parte del tempo. Direi che configurarlo sarebbe molto più semplice di qualsiasi soluzione personalizzata là fuori.
Vedi http://www.howtoforge.com/mysql_database_replication per istruzioni, dovresti essere attivo e in esecuzione in 10-15 minuti e non dovrai pensarci più.
L'unico aspetto negativo che posso vedere è che è asincrono, ovvero. devi avere un master designato che ottiene tutte le modifiche.