c'e' solo un modo di fare le cose: farle bene
Teoria: two is meglio che one!
Pratica:
La replicazione fornita da MySQL si definisce “one-way“, perché tale operazione è gestita dal server in modo monodirezionale, ovvero consente di replicare le operazioni di scrittura effettuate su un database master su più database slave.
Come è lecito aspettarsi i server slave saranno utilizzati solo per le letture mentre, sul master, graveranno gli inserimenti e gli update (nessuno vieta di utilizzarlo anche per le operazioni di select).
Il procedimento di replicazione di MySQL si riassume in questi step:
Il rapporto tra master e slave è così definito:
Bene si parte.
Configuriamo il master
Prima di tutto:
/etc/init.d/mysql stop
Così non si fanno disastri con il server up.
Utilizzando Debian è necessario editare il file /etc/mysql/my.cnf per abilitare il networking e la scrittura del file di log:
#skip-networking
bind-address = [indirizzo_ip_raggiungibile_dal_server_slave]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = [nome_db_da_replicare]
Adesso per sicurezza, cancelliamo (se presenti) i file di log dentro /var/log/mysql/ che iniziano con mysql-bin.*.
Questo serve per far ricreare al server un file di log pulito ed a prova di errore.
A questo punto facciamo ripartire il server con il classico
/etc/init.d/mysql start
Ripartito il server, accediamo via consolle a MySQL:
mysql -u root -p
E diciamo a MySQL di consentire la replica al nostro slave:
GRANT REPLICATION SLAVE ON *.* TO '[nome_utente]'@'[indirizzo_ip_dello_slave]' IDENTIFIED BY '[password]';
FLUSH PRIVILEGES;
Ora bisogna selezionare il database da replicare e sbloccare eventuali lock di lettura per spostare i dati (se presenti) dal master allo slave:
USE [nome_database];
FLUSH TABLES WITH READ LOCK;
Controlliamo lo stato del master:
SHOW MASTER STATUS;
Dovrebbe venir fuori qualcosa del genere:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | [nome_db] | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Bene, adesso usciamo dalla shell di MySQL (con il classico quit;) ed esportiamo il database in un file sql da traferire sul server slave:
mysqldump -u root -p --opt [nome_db] > [nome_db].sql
Configuriamo lo slave
E’ necessario creare il database da replicare quindi entriamo nella consolle del server MySQL:
mysql -u root -p
Enter password:
CREATE DATABASE [nome_db];
quit;
Importiamo il dump SQL del server master:
mysql -u root -p [nome_db] < [path_dove_e_salvato_il_file]/[nome_db].sql
Adesso bisogna editare il file /etc/mysql/my.cnf per abilitare la lettura del file di log del master:
server-id=2
master-host=[ip_master]
master-user=[user_creato_sul_master]
master-password=[password]
master-connect-retry=60
replicate-do-db=[nome_db]
Le direttive per il log bin sul server slave possono essere disabilitate.
Bene, abbiamo finito, un bel riavvio e siamo a posto:
/etc/init.d/mysql restart
Ogni cosa che scrivete sul master verrà (forse
) replicato in pochi millesimi di secondo sullo slave.
18 lune e tante stelle... La #Neve è tutto! http://t.co/Zwg5fhky [gianlucagentile]
@AngelikaCoco presto capirai anche tu perché ne vale sempre sempre sempre la pena! Snowboard4Me? It's my life... [gianlucagentile]
Eh poi capisci che cos'è la felicità. #Neve [gianlucagentile]
Powered by Lifestream.
| L | M | M | G | V | S | D |
|---|---|---|---|---|---|---|
| « nov | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
4 Responses for "MySQL: Replicazione database"
Vi ringrazio molto per le istruzioni.
Una domanda: con quanto scritto sopra, ogni quanto si allinea lo slave?
Grazie
Non c’è un tempo prestabilito, il tempo di aggiornamento è variabile e dipende da molti fattori ma, per esperienza,è sempre inferiore ai 2/3 secondi.
[...] supporta nativamente la configurazione master/slave tra due database ma in questo modo si può scrivere solo sul [...]
[...] backend un database MySQL, è facile mettere su un altro server sul quale configurare PowerDNS e la replica del database principale oppure, si può fare in modo che entrambi i server DNS usino lo stesso server MySQL ma [...]
Leave a reply