Project

General

Profile

MySQLReplication » History » Version 6

japoco romagnoli, 03/14/2013 12:32 PM

1 1 japoco romagnoli
h1. Configurare la replicazione di MySQL
2 2 japoco romagnoli
3 2 japoco romagnoli
Occorrono almeno due installazioni indipendenti di MySQL, una macchina deve fare da master, le altre da slave. Prenderemo in considerazione solo il caso elementare di due macchine. Le due istanze devono essere configurate per essere raggiungibili via rete. In pratica si dice al master di creare un log binario con le operazioni che vengono eseguite in scrittura. Lo slave leggendo i file di log ripete le stesse operazioni su se stesso per “allinearsi”.
4 2 japoco romagnoli
5 2 japoco romagnoli
Si cominici con configurare il primo server MySQL esistente come master, anzitutto si fermi il servizio con:
6 2 japoco romagnoli
7 2 japoco romagnoli
<pre>
8 2 japoco romagnoli
service mysql stop
9 2 japoco romagnoli
</pre>
10 3 japoco romagnoli
11 5 japoco romagnoli
A questo punto modifichiamo il file  @/etc/mysql/my.cnf@ del master per abilitare networking e scrittura del file di log binario, inserendo le seguenti configurazioni al posto di quelle correnti:
12 3 japoco romagnoli
13 3 japoco romagnoli
<pre>
14 4 japoco romagnoli
[...]
15 4 japoco romagnoli
bind-address	= 0.0.0.0
16 4 japoco romagnoli
[...]
17 3 japoco romagnoli
server-id = 1
18 3 japoco romagnoli
log_bin = /var/log/mysql/mysql-bin.log
19 3 japoco romagnoli
expire_logs_days = 10
20 3 japoco romagnoli
max_binlog_size = 100M
21 6 japoco romagnoli
binlog_do_db = nome_database
22 1 japoco romagnoli
[...]
23 5 japoco romagnoli
</pre>
24 5 japoco romagnoli
25 5 japoco romagnoli
Se si dovesse ripartire da zero, cancelliamo eventuali vecchi file di log binario in modo tale che il server crei un log pulito 
26 5 japoco romagnoli
a prova di errore.
27 5 japoco romagnoli
28 5 japoco romagnoli
<pre>
29 5 japoco romagnoli
rm /var/log/mysql/mysql-bin.*
30 5 japoco romagnoli
</pre>
31 5 japoco romagnoli
32 5 japoco romagnoli
si provveda poi a riavviare il server, in modo che prenda le nuove configurazioni:
33 5 japoco romagnoli
34 5 japoco romagnoli
<pre>
35 1 japoco romagnoli
service mysql start
36 6 japoco romagnoli
</pre>
37 6 japoco romagnoli
38 6 japoco romagnoli
Una volta attive le nuove configurazioni occorre trasferire i dati dal master allo slave per l'importazione iniziale, per questo una volta entrati sulla CLI di MySQL si seleziona il database da replicare e si bloccano le tabelle in scrittura per avere uno stato coerente dei dati:
39 6 japoco romagnoli
40 6 japoco romagnoli
<pre>
41 6 japoco romagnoli
USE nome_database
42 6 japoco romagnoli
FLUSH TABLES WITH READ LOCK;
43 6 japoco romagnoli
</pre>
44 6 japoco romagnoli
45 6 japoco romagnoli
Si potrà controllare lo stato del master con qualcosa del tipo:
46 6 japoco romagnoli
47 6 japoco romagnoli
<pre>
48 6 japoco romagnoli
mysql> SHOW MASTER STATUS;
49 6 japoco romagnoli
+------------------+----------+--------------+------------------+
50 6 japoco romagnoli
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
51 6 japoco romagnoli
+------------------+----------+--------------+------------------+
52 6 japoco romagnoli
| mysql-bin.000013 |      106 |              | nome_database    |
53 6 japoco romagnoli
+------------------+----------+--------------+------------------+
54 6 japoco romagnoli
1 row in set (0.00 sec)
55 6 japoco romagnoli
</pre>
56 6 japoco romagnoli
57 6 japoco romagnoli
A questo punto senza chiudere la shell di MySql (per evitare di perdere il lock sulle tabelle), si apre una nuova shell ed esportiamo il database in un file @.sql@ da trasferire sul server slave:
58 6 japoco romagnoli
59 6 japoco romagnoli
<pre>
60 6 japoco romagnoli
mysqldump -u root -p --opt nome_database > nome_database.sql
61 6 japoco romagnoli
</pre>
62 6 japoco romagnoli
63 6 japoco romagnoli
una volta finita l'esportazione possiamo tornare sulla shell di mysql per sbloccare il lock in lettura:
64 6 japoco romagnoli
65 6 japoco romagnoli
<pre>
66 6 japoco romagnoli
UNLOCK TABLES;
67 6 japoco romagnoli
</pre>
68 6 japoco romagnoli
69 6 japoco romagnoli
70 6 japoco romagnoli
Occorre poi configurare lo slave con un diverso @server-id@, e metterlo in ascolto sull'indirizzo generico:
71 6 japoco romagnoli
72 6 japoco romagnoli
<pre>
73 6 japoco romagnoli
[...]
74 6 japoco romagnoli
bind-address	= 0.0.0.0
75 6 japoco romagnoli
[...]
76 6 japoco romagnoli
server-id = 2
77 6 japoco romagnoli
log_bin = /var/log/mysql/mysql-bin.log
78 6 japoco romagnoli
expire_logs_days = 10
79 6 japoco romagnoli
max_binlog_size = 100M
80 6 japoco romagnoli
[...]
81 3 japoco romagnoli
</pre>