 
View Full Version : [MYSQL] Sincronizzazione database
io ho 2 database mysql, uno definito come master e uno come slave: le operazione di insert update delete vengono fatte sul database master.. ora vorre iche le modifiche fatte sul db master vengono i nautomatico fatte anche sul db slave senza che io debba fare insert pure su questo.
E' possibile?
NapalM
dai un'occhiata ai triggers (http://dev.mysql.com/doc/refman/5.0/en/triggers.html).
no MySQL 5.0.2?! ...aiaiaiaiai!
'iao
Spiego meglio il mio caso:
io ho un BOT_A che scrive nel DB_A e si trova sulla stessa macchina
ho anche un BOT_B e un DB_B su un'altra macchina sincronizzato con il DB_A (quindi il BOT_B non scrive nulla).
Se per caso il BOT_A cade il BOT_B inizia a scrivere ul DB_B.
Il problema in questo caso è come posso fare automaticamente a sincronizzare il master (DB_A) allo slave (BOT_B) quando il BOT_A resuscita...
NapalM
ah ok, avevo sottovalutato un po' la situazione... :stordita:
mmm da perfetto niubbo (prego chiunque legga di ricordarsi delle 2 parole anteposte a questa frase tra parentesi  :read: ) mi vengono in mente queste possibili soluzioni:
1)aggiunta di un campo da usare come flag in ogni tabella del DB_B che indichi quando il campo sia stato scritto dal BOT_A (e che quindi questo campo sia presente anche nel DB_A) piuttosto che dal B (e che quindi questo campo non sia presente nel DB_A) e al resuscitamento del BOT_A fargli fare il controllo dei campi del DB_B e di conseguenza l'inserimento di quelli che mancano nel DB_A;
2)far si che quando il BOT_B scrive nel DB_B scriva anche nel DB_A (ma se il BOT_A è giù penso che molto probabilmente sia giù anche il DB_A visto che si trovano sulla stessa macchina);
spero di non aver scritto solo cazzate, che quelle che ho scritto non siano troppo ingarbugliate e magari di averti dato almeno uno spunticino piccino picciò che possa aiutarti a risolvere il problema!
'iao
La soluzione piu' semplice e' quella di configurare la replica automatica, master e slave sono nati per quello.
http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
Pero' se ti va giu' il master il passaggio in scrittura sullo slave deve essere fatto manualmente, il mysql gestisce il failover solo con mysql cluster (che se non ricordo male e' sperimentale)
La soluzione piu' semplice e' quella di configurare la replica automatica, master e slave sono nati per quello.
http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
Pero' se ti va giu' il master il passaggio in scrittura sullo slave deve essere fatto manualmente, il mysql gestisce il failover solo con mysql cluster (che se non ricordo male e' sperimentale)
Dopo verie ricerche avevo trovato anch'io qualcosa sulla replicazione: il fatto di gestire minualmente la scrittura su B in caso A sia giù lo farei tramite java e non ci sono problemi ma quello che mi chiedevo io e se quando A ritorna sù ( anche qua automaticamente B smette di scrivere e rinizia A) i dati scritti su B saranno automaticamente inseriti (replicati) anche su A. Mi confermi che la replicazione sia sincrona e non asincrona?
Grazie anche a 0rph3n per le dritte, se la replicazione non dovesse andare ben e applicherò una delle tue teorie ;)
Grazie a tutti quanti.
NapalM
La soluzione piu' semplice e' quella di configurare la replica automatica, master e slave sono nati per quello.
http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
Pero' se ti va giu' il master il passaggio in scrittura sullo slave deve essere fatto manualmente, il mysql gestisce il failover solo con mysql cluster (che se non ricordo male e' sperimentale)
bene bene, qualcosa di nuovo da studiare :D considero queste cose interessantissime...
[come soleva dire Golden Boy pedalando sulla sua biciclettina: "Imparo Imparo Imparo Imparo Imparo Imparo..."]
...peccato manchi il tempo :cry:
Grazie anche a 0rph3n per le dritte, se la replicazione non dovesse andare ben e applicherò una delle tue teorie ;)
lusingato :sofico:
'iao
quello che mi chiedevo io e se quando A ritorna sù ( anche qua automaticamente B smette di scrivere e rinizia A) i dati scritti su B saranno automaticamente inseriti (replicati) anche su A. Mi confermi che la replicazione sia sincrona e non asincrona?
No. O meglio non automaticamente.
Supponendo che A e' inizialmente il master e B lo slave, nel caso che A vada giu' la procedura per ripartire con la replica e':
1 - Fermare B e farlo ripartire come master. Da quel momento B accettera' nuove insert, update, delete, ecc e il servizio potra' ripartire.
2 - Rimettere a posto A :-)
3- Riavviare A come slave di B. In questo modo A riesce ad allinearsi con B che nel frattempo avra' eseguito nuove istruzioni.
4- Se necessario, a database allineati, fare shutdown di entrambi ed invertire la condizione master-slave. In questo modo si ritorna alla situazione originale.
E' una procedura un po' complicatina, ma come detto il sistema di replica non e' un failover cluster.
No. O meglio non automaticamente.
Supponendo che A e' inizialmente il master e B lo slave, nel caso che A vada giu' la procedura per ripartire con la replica e':
1 - Fermare B e farlo ripartire come master. Da quel momento B accettera' nuove insert, update, delete, ecc e il servizio potra' ripartire.
2 - Rimettere a posto A :-)
3- Riavviare A come slave di B. In questo modo A riesce ad allinearsi con B che nel frattempo avra' eseguito nuove istruzioni.
4- Se necessario, a database allineati, fare shutdown di entrambi ed invertire la condizione master-slave. In questo modo si ritorna alla situazione originale.
E' una procedura un po' complicatina, ma come detto il sistema di replica non e' un failover cluster.
Però fisicamente dovrei farlo io.... :(
Qualcosa invece che automatizzi il tutto non esiste? In pratica da avere una config master-master.
NapalM
Per avere due "master" ci vuole anche un buon meccanismo che li tenga allineati in tempo reale, che gestisca il failover, che magari permetta di aggiungere o togliere nodi senza down e riallineando il tutto in automatico.
Questa cosa si chiama "cluster".
Esiste MySQL Cluster, che e' molto giovane ma e' l'unico a mia memoria a costo 0. Alternativamente il piu' collaudato credo sia Oracle RAC, ma costa tanto.
Tieni presente che per mettere su un cluster ci vuole anche una struttura hardware adeguata (storage condiviso, interconnessione diretta e dedicata...) ed e' anche questo il motivo per cui esistono meccanismi piu' semplici come le repliche, che comunque richiedono un "minimo" di intervento manuale qualora ci sia qualcosa che non va.
Per avere due "master" ci vuole anche un buon meccanismo che li tenga allineati in tempo reale, che gestisca il failover, che magari permetta di aggiungere o togliere nodi senza down e riallineando il tutto in automatico.
Questa cosa si chiama "cluster".
Esiste MySQL Cluster, che e' molto giovane ma e' l'unico a mia memoria a costo 0. Alternativamente il piu' collaudato credo sia Oracle RAC, ma costa tanto.
Tieni presente che per mettere su un cluster ci vuole anche una struttura hardware adeguata (storage condiviso, interconnessione diretta e dedicata...) ed e' anche questo il motivo per cui esistono meccanismi piu' semplici come le repliche, che comunque richiedono un "minimo" di intervento manuale qualora ci sia qualcosa che non va.
Capito, mi hai chiarito le idee. essendo un progettino piccolo di banca dati fra noi amici direi che la via migliore è la replicazione e poi aggiustare con java la sincronizzazione slave->master se il master va giù.
Grazie mille :)
NapalM
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.