MySQLReplication » History » Version 7
japoco romagnoli, 03/14/2013 12:50 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 | 7 | japoco romagnoli | Scrivere la creazione dell'utente di replicazione: |
39 | 7 | japoco romagnoli | |
40 | 7 | japoco romagnoli | GRANT ECC. |
41 | 7 | japoco romagnoli | |
42 | 7 | japoco romagnoli | |
43 | 7 | japoco romagnoli | |
44 | 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: |
45 | 6 | japoco romagnoli | |
46 | 6 | japoco romagnoli | <pre> |
47 | 6 | japoco romagnoli | USE nome_database |
48 | 6 | japoco romagnoli | FLUSH TABLES WITH READ LOCK; |
49 | 6 | japoco romagnoli | </pre> |
50 | 6 | japoco romagnoli | |
51 | 6 | japoco romagnoli | Si potrà controllare lo stato del master con qualcosa del tipo: |
52 | 6 | japoco romagnoli | |
53 | 6 | japoco romagnoli | <pre> |
54 | 6 | japoco romagnoli | mysql> SHOW MASTER STATUS; |
55 | 6 | japoco romagnoli | +------------------+----------+--------------+------------------+ |
56 | 6 | japoco romagnoli | | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | |
57 | 6 | japoco romagnoli | +------------------+----------+--------------+------------------+ |
58 | 6 | japoco romagnoli | | mysql-bin.000013 | 106 | | nome_database | |
59 | 6 | japoco romagnoli | +------------------+----------+--------------+------------------+ |
60 | 6 | japoco romagnoli | 1 row in set (0.00 sec) |
61 | 6 | japoco romagnoli | </pre> |
62 | 6 | japoco romagnoli | |
63 | 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: |
64 | 6 | japoco romagnoli | |
65 | 6 | japoco romagnoli | <pre> |
66 | 6 | japoco romagnoli | mysqldump -u root -p --opt nome_database > nome_database.sql |
67 | 6 | japoco romagnoli | </pre> |
68 | 6 | japoco romagnoli | |
69 | 6 | japoco romagnoli | una volta finita l'esportazione possiamo tornare sulla shell di mysql per sbloccare il lock in lettura: |
70 | 6 | japoco romagnoli | |
71 | 6 | japoco romagnoli | <pre> |
72 | 6 | japoco romagnoli | UNLOCK TABLES; |
73 | 6 | japoco romagnoli | </pre> |
74 | 6 | japoco romagnoli | |
75 | 6 | japoco romagnoli | |
76 | 6 | japoco romagnoli | Occorre poi configurare lo slave con un diverso @server-id@, e metterlo in ascolto sull'indirizzo generico: |
77 | 6 | japoco romagnoli | |
78 | 6 | japoco romagnoli | <pre> |
79 | 6 | japoco romagnoli | [...] |
80 | 6 | japoco romagnoli | bind-address = 0.0.0.0 |
81 | 6 | japoco romagnoli | [...] |
82 | 6 | japoco romagnoli | server-id = 2 |
83 | 6 | japoco romagnoli | log_bin = /var/log/mysql/mysql-bin.log |
84 | 6 | japoco romagnoli | expire_logs_days = 10 |
85 | 6 | japoco romagnoli | max_binlog_size = 100M |
86 | 6 | japoco romagnoli | [...] |
87 | 7 | japoco romagnoli | </pre> |
88 | 7 | japoco romagnoli | |
89 | 7 | japoco romagnoli | Adesso occorre creare un DB sullo slave con lo stesso nome di quello che vogliamo replicare: |
90 | 7 | japoco romagnoli | |
91 | 7 | japoco romagnoli | <pre> |
92 | 7 | japoco romagnoli | mysqladmin -u root -p create nome_database |
93 | 7 | japoco romagnoli | </pre> |
94 | 7 | japoco romagnoli | |
95 | 7 | japoco romagnoli | a questo punto si può caricare il file di dump .sql direttamente sul database: |
96 | 7 | japoco romagnoli | |
97 | 7 | japoco romagnoli | <pre> |
98 | 7 | japoco romagnoli | mysql nome_database < nome_database.sql |
99 | 7 | japoco romagnoli | </pre> |
100 | 7 | japoco romagnoli | |
101 | 7 | japoco romagnoli | infine occorre impostare il server come slave passando anche i paramatri del master con cui interfacciarsi: |
102 | 7 | japoco romagnoli | |
103 | 7 | japoco romagnoli | <pre> |
104 | 7 | japoco romagnoli | change master to master_host='nome_Master.Domain', master_user='nome_utente_Master', master_port=3306, master_password='pw_utente_Master', master_log_file='mysql-bin.00000x', master_log_pos=xxx; |
105 | 7 | japoco romagnoli | start slave; |
106 | 7 | japoco romagnoli | |
107 | 3 | japoco romagnoli | </pre> |