5

Diciamo che ho un database di automobili. Ho marche e modelli (FK to Makes). Ho intenzione di far monitorare le loro auto dagli utenti. ogni auto ha un FK per il modello. Ora ho molti utenti e voglio dividere il mio database per distribuire il carico. Le tabelle Makes e Models non cambiano molto, ma devono essere condivise tra i frammenti. Il mio pensiero è di usare la replica MySQL da un master DB di marche e modelli su ciascun database slave. La mia domanda è: posso scrivere in modo sicuro nei database degli slave assumendo che non scrivo su quei tavoli sul master?MySQL: scrittura nel nodo slave

E mentre sul soggetto, c'è comunque da garantire che un database slave abbia gli ultimi dati? Ad esempio, qualcuno ha appena aggiunto la marca "Toro" e quindi desidera aggiungere la propria auto. Posso garantire che il database slave che stanno utilizzando abbia gli ultimi dati principali?

risposta

5

Sì, in generale è possibile scrivere in modo sicuro su una tabella degli slave che non viene scritta sul master. Se fai cose come inserire le righe auto_increment sugli schiavi e sul master, in modo indipendente, avrai certamente dei problemi. È necessario configurare la tabella in modo che sia esclusa completamente dalla replica, in realtà.

Per verificare se si dispone di dati più recenti, SHOW SLAVE STATUS include un campo Seconds_Behind_Master che ti dice se lo slave è aggiornata. Ovviamente vuoi che sia zero. Per essere certi che i dati inseriti e replicati siano presenti, ovviamente, è necessario attendere un secondo e quindi vedere che Seconds_Behind_Master è zero.

+0

fare sai se esiste un comando di blocco per la sincronizzazione con il master? –

+0

Non c'è. (Ignorando 'LOAD DATA FROM MASTER', che non fa quello che vuoi, ed è comunque rotto.) – chaos

+0

C'è qualche meccanismo di write-through: uno slave inoltra semplicemente la richiesta di scrittura al master? – Velkan

2

Questa è stata una buona soluzione che ho spigolato durante la ricerca

ho inserito il punto principale come avilable qui:

http://erlycoder.com/43/mysql-master-slave-and-master-master-replication-step-by-step-configuration-instructions-

MySQL replica master-master e autoincremento indici

Se sei utilizzando la replica master-slave, molto probabilmente progetterai la tua applicazione come scrivere per masterizzare e leggere da slave o più slave. Ma quando si utilizza la replica master-master, si intende leggere e scrivere su qualsiasi server master. Quindi, in questo caso, il problema con gli indici autoincrementali aumenterà. Quando entrambi i server dovranno aggiungere un record (diverso uno per ogni server contemporaneamente) alla stessa tabella. Ognuno assegnerà loro lo stesso indice e proverà a replicare all'unguento, questo creerà una collisione. Un semplice trucco permetterà di evitare tali collisioni sul server MySQL.

Al Master 1/Slave 2 metti in /etc/my.cnf:

auto_increment_increment= 2 
auto_increment_offset = 1 

Al Master 2/Slave 1 metti in /etc/my.cnf:

auto_increment_increment= 2 
auto_increment_offset = 2