Replicare tutti o alcuni dabase gestiti da un server MySQL su almeno un pc anche se tale pc non è sempre collegato alla rete.
Un master server (quello dove vengono eseguire le scritture dei dati) e N slave che hanno una copia di tutto o alcuni database.
Master e slave sono identifcati da un numero che, nella stessa "rete di replicazione", deve essere univoco.
Quando lo slave è collegato alla rete domestica, esegue una connessione al master e sincronizza i database così da averne una copia esatta.
MySQL server, MySQL client, tail
Come di consueto apt ci viene in aiuto:
Vi verrà chiesto se, quando verrà rimosso mysql-server, dovranno essere cancellati anche i database
Come sempre il file di configurazione principale è in /etc/mysql e si chiama my.cnf, quindi apriamolo con l'editor preferito e modifichiamolo:
La prima cosa da fare è COMMENTARE la riga "skip-networking" che avvia mysql solo con socket ovvero nn apre la porta 3306 (standard) per accettare connessioni da rete.
Decommentiamo poi la riga "server-id" e indichiamo un numero positivo maggiore di 0 (1 ad esempio) che sarà ovviamente l'id del server.
Decommentiamo anche "log-bin" e lasciamo il path già indicato (/var/log/mysql/mysql-bin.log)
A questo punto riavviamo il server MySQL per far appliacre le modifiche.
Ora creiamo l'utente che si occuperà della replicazione, accediamo alla shell sql con:
>GRANT SUPER,REPLICATION CLIENT,REPLICATION SLAVE,RELOAD ON *.* TO 'replicatore'@'%.miodominio.estensione' IDENTIFIED BY 'password';
In questo modo abbiamo creato l'utente "replicatore" con password "password" che ha privilegi di "SUPER,REPLICATION CLIENT,REPLICATION SLAVE,RELOAD" su tutto il database e che può collegarsi SOLO da un ip appartente al dominio ".miodominio.estensione".
ESEMPIO
Nel mio caso la query è stata:
In questo modo "replicatore" può accedere SOLO se si collega dal pc che ha ip `host caspar.valhalla.lan` (che ha una lease riservata sul mio dhcp). Al posto del nome specifico della macchina è possibile indicare l'ip.
Usciamo dalla shell sql con semplice
Come fatto per il master, apriamo il file /etc/mysql/my.cnf, commentiamo "skip-networking" e arriviamo alla riga "server-id":
# Identificatore dello slave: deve essere diverso da quello del master e di tutti gli altri slave
server-id = 2
# Ip o nome del master (deve essere risolvibile in un indirizzo ip)
master-host = services.valhalla.lan
# Nome con cui lo slave si presenta al master
report-host = caspar.valhalla.lan
# Utente da usare per la replicazione
master-user = replicatore
# Password dell'utente per la replicazione
master-password = my_pwd
# Indichiamo i database che intendiamo replicare, uno per riga
replicate-do-db = postfix
replicate-do-db = proftpd
replicate-do-db = phpmyadmin
# Tempo di attesa in secondi prima di ritentare la connessione in caso di fallimento
master-connect-retry = 60
# Log "verboso"
log-warnings
A questo punto riavviamo anche il server MySQL dello slave aprimo la shell MySQL:
> load data from master;
Se non vengono restituiti errori, tutto è ok e avrete la replicazione dei databse indicati sullo/sugli slave.
Autore: Incubus
E-Mail: incubus@gl-como.net
Membro del Gruppo Linux Como: http://www.gl-como.net
Commenti
Inviato da paolo il Ven, 01/04/2005 - 18:32.
Bella Guida.
Oramai hai preso la mano!! Come al solito un'ottima guida ben dettagliata e formattata alla perfezione.
Tra l'altro è un argomento molto interessante, sarebbe carino sviluppare una Guida sulle varie conigurazione e ottimizzazioni del Server Mysql, cosa che in questo periodo è il mio pane quotidiano.
Thx!
Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network
Inviato da fbrisa il Ven, 01/04/2005 - 19:15.
Complimenti
Mitico !
Una guida semplice, ben fatta e di grande utilità !
Veramente un grande, posso andare in giro a dire che sono un tuo amico ?
Inviato da Stefano il Ven, 01/04/2005 - 21:51.
Re: Complimenti
Ottima ottima guida!
Complimenti....ti metto un bel 9!
Stefano Mainardi - Founder of ILDN & CEO of Twinbit
Inviato da cheis il Ven, 01/04/2005 - 22:03.
Re: Complimenti
Grande: utile e chiara. 9 anche per me.
[=x-small]Knowledge is power: SHARE IT BABY!!![/]
_____________________________________________
Inviato da Incubus il Sab, 02/04/2005 - 20:08.
Versione
Scusate ma ho dimenticato di indicare che la versione di MySQL usata è la 4.0.X (4.0.24 per essere precisi, della debian testing)
Ringrazio per i commenti
Sorry
KNOWLEDGE IS POWER
Homepage: http://incubus.homelinux.net
Wiki: http://wiki.incubus.homelinux.net
LUG: http://www.gl-como.net
Inviato da madbrains il Dom, 03/04/2005 - 13:53.
Re: Versione
Bella guida veramente, credo che prenderò spunto per un progetto che sto portando avanti, una specie di rubrica con indirizzi e contatti da fare gestire ad un master e fare utilizzare a determinati slave, grazie ancora per avermi risparmiato del lavoro e del tempo
http://mad.nemail.it
Inviato da Incubus il Lun, 04/04/2005 - 10:48.
Re: Versione
Se la mole di carico è alta puoi distribuire in qualche modo le read sugli slave ma le write DEVONO essere fatte sul master: attenzione a non confondere la replicazione con il clustering.
Con la replicazione hai N copie del/i db/s ma le write DEVONO essere fatte sul master mentre con un cluster puoi fare read e write su ogni nodo.
KNOWLEDGE IS POWER
Homepage: http://incubus.homelinux.net
Wiki: http://wiki.incubus.homelinux.net
LUG: http://www.gl-como.net
Inviato da cosmy il Ven, 15/09/2006 - 16:54.
Re: Versione
Guida molto chiara e semplice.
Vogliamo parlare un po' degli utilizzi pratici della replicazione?
Mettiamo di avere master e slave su due server sempre connessi, con connessione ethernet tra loro diretta per un update dello slave continuo veloce e sicuro.
Se per caso mi si schianta il database Master come faccio a sfruttare lo Slave?
E se volessi alleggerire il carico di select sul master, girando qualche query allo slave, dove devo agire?
O Tempora, O Mores!