HOW TO: Replicazione Master/Slave Mysql

In questo articolo

  1. Fasi preliminari
  2. Fase 1: Configurazione del Master Server
  3. Fase 2: Configurazione dello Slave Server

Una replicazione Mysql è una di quelle procedure a cui nessun Systemadmin può sottrarsi. Nello specifico, una replicazione Sql è la copia elettronica di una o più banche dati presenti in una macchina (computer o server) verso un’altra in modo che tutti gli utenti condividano lo stesso livello di informazioni. Il risultato è un database distribuito in cui un utente (o un amministratore) può accedere ai dati rilevanti per le proprie task senza interferire con il lavoro degli altri.

L’implementazione di una replicazione di banche dati con lo scopo di eliminare ambiguità di dati o inconsistenza è detta normalizzazione.

Di seguito spiegherò come implementare una replica di tipo Master/Slave.

Fasi preliminari

Come esempio, mi avvarrò di Ubuntu Server 16.04 e Mysql alla versione 5.7. I server ovviamente saranno 2:

  • Master con IP 192.168.10.10
  • Slave con IP  192.168.10.20

Si può ovviamente creare più di uno Slave, il procedimento non cambia, va solo ripetuto di slave in slave.
Prima di proseguire, assumiamo la condizione che entrambi i nodi abbiano la stessa configurazione e siano connessi alla stessa rete locale.

Fase 1: Configurazione del Master Server

Per prima cosa ci serve installare mysql-server

sudo apt install mysql-server

per poi configurare il nostro file di configurazione presente in /etc/mysql/mysql.conf.d/mysqld.cnf . Per farlo potete usare vim o nano, io adopererò vim.

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

Il prossimo passo è modificare il suddetto file, decommentando i parametri che ci interessano e settandoli per la nostra causa:

bind-address = 192.168.10.10
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log

Riavviamo ora mysql con:

 sudo service mysql restart

Proseguiamo creando un utente mysql per la replicazione. Questo utente ci serve per connetterci al master server ed è generalmente usato nello slave server quando quest’ultimo si connette al master server. Questo account ha bisogno del privilegio REPLICATION SLAVE. Potete chiamare questo utente come meglio credete, non fa alcuna differenza. Io utilizzerò il nome ‘replicante’.

 mysql -u root -p 
Enter password:
mysql> CREATE USER 'replicante'@'192.168.10.20' IDENTIFIED BY 'latuapassword';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicante'@'192.168.10.20';
Query OK, 0 rows affected (0.00 sec)

Blocchiamo ora il nostro Master Server:

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

Non dimentichiamo che questo blocco rimane finchè non si esce dalla console mysql o finchè non si richiama UNLOCK TABLES. Il blocco deve rimanere attivo finchè il dump mysql non sia terminato (ci arriveremo a breve).

Possiamo adesso controllare lo stato del Master Server

HOW TO: Replicazione Master/Slave Mysql

L’output che otterrete sarà simile a questo.

“Dumpiamo” ora tutti i database del Master Server. Vi ricordo, qualora ce ne fosse bisogno, di aprire un nuovo terminale, poichè  il comando mysqldump va eseguito al di fuori della console mysql e perchè, come detto prima, è attivo il READ LOCK.

mysqldump -u root -p --all-databases --master-data > dump01.sql

Potete chiamare il file dum01.sql come volete.
I prossimi passi da fare sono rispettivamente, sbloccare il database del nostro Master Server

mysql> UNLOCK TABLES;

e copiare il nostro file dump01.sql sul nostro Slave Server

scp dump01.sql 192.168.10.20:/tmp

Fase 2: Configurazione dello Slave Server

Assumiamo che il pacchetto mysql-server  sia già installato. Come fatto per il master server, andiamo anche nello Slave Server a modificare il file mysqld.cnf  in /etc/mysql/mysql.conf.d/ .

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

e modificare quanto segue:

bind-address = 192.168.10.20
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log

Riavviamo prima il servizio mysql:

 sudo service mysql restart

per poi importare in mysql il dump file precedentemente trasferito dal Master Server:

mysql -u root -p < /tmp/dump01.sql

Logghiamoci ora a mysql (sapete ormai come si fa) e stoppiamo il nostro slave

mysql> STOP SLAVE;

per poi far si che questo comunichi correttamente con il nostro Master Slave.

mysql> CHANGE MASTER TO
 -> MASTER_HOST='192.168.10.10',
 -> MASTER_USER='replicante',
 -> MASTER_PASSWORD='yourpassword',
 -> MASTER_LOG_FILE='mysql-bin.113786',
 -> MASTER_LOG_POS=29495809;

Avviamo ora lo Slave:

mysql> START SLAVE;

Bene, ora lo Slave Server e’ pronto a comunicare con il Master Server. Per controllare lo stato dello Slave ci basta digitare:

mysql> SHOW SLAVE STATUS\G

Per qualsiasi dubbio e/o domanda scriveteci pure nei commenti.

chat Discuti questo articolo con
help Ubuntu Italia
/gentedilinux
ubuntu