User Tools

Site Tools


doc:appunti:linux:sa:mysql_replica_master_master

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:mysql_replica_master_master [2011/09/08 12:50] – [MySQL replica master-master] niccolodoc:appunti:linux:sa:mysql_replica_master_master [2025/03/12 15:03] (current) – [Verifica dello stato SLAVE] niccolo
Line 1: Line 1:
 ====== MySQL replica master-master ====== ====== MySQL replica master-master ======
  
-  * [[http://www.howtoforge.com/mysql5_master_master_replication_debian_etch| Up Master-Master Replication With MySQL 5 On Debian Etch]] +Riferimenti web: 
-  * [[http://www.howtoforge.com/mysql_master_master_replication|MySQL Master Master Replication]]+ 
 +  * **[[http://www.howtoforge.com/mysql5_master_master_replication_debian_etch| Up Master-Master Replication With MySQL 5 On Debian Etch]]** 
 +  * **[[http://www.howtoforge.com/mysql_master_master_replication|MySQL Master Master Replication]]** 
 + 
 +===== Configurare la replica master-master ===== 
 + 
 +Con questa configurazione si tiene replicato **un solo database**. 
 + 
 +<code> 
 +-- Su server1 
 +GRANT REPLICATION SLAVE ON *.* TO 'slave2_user'@'%' IDENTIFIED BY 'slave2_password'; 
 +FLUSH PRIVILEGES; 
 + 
 +CREATE DATABASE exampledb; 
 +CONNECT exampledb; 
 + 
 +CREATE TABLE clienti ( 
 +    id INTEGER NOT NULL AUTO_INCREMENT, 
 +    name CHAR(100), 
 +    PRIMARY KEY (id) 
 +) ENGINE=INNODB; 
 + 
 +CREATE TABLE fatture ( 
 +    id INTEGER NOT NULL AUTO_INCREMENT, 
 +    cliente_id INTEGER, 
 +    PRIMARY KEY (id), 
 +    FOREIGN KEY (cliente_id) REFERENCES clienti(id) 
 +) ENGINE=INNODB; 
 + 
 +SHOW TABLE STATUS; 
 + 
 +INSERT INTO clienti (name) VALUES ('Rigacci.Org'); 
 +INSERT INTO fatture (cliente_id) VALUES (1); 
 +DELETE FROM clienti; 
 + 
 +vi /etc/mysql/my.cnf 
 +# Vedere la man page di my.cnf, che non esiste. 
 +/etc/init.d/mysql restart 
 + 
 +-- Su server2 
 +GRANT REPLICATION SLAVE ON *.* TO 'slave1_user'@'%' IDENTIFIED BY 'slave1_password'; 
 +FLUSH PRIVILEGES; 
 + 
 +vi /etc/mysql/my.cnf 
 +# Vedere la man page di my.cnf, che non esiste. 
 +/etc/init.d/mysql restart 
 +</code> 
 + 
 +Per vedere se si sono assegnati i permessi di replica: 
 + 
 +<code> 
 +SHOW GRANTS FOR 'slave2_user'@'%'; 
 +</code> 
 + 
 +Ovviamente è opportuno concedere i grant non dall'indirizzo IP wildcard **%%%%%**, ma al singolo utente/indirizzo, del tipo **%%'replication'@'116.213.177.13'%%**. 
 +===== Sincronizzare il db ===== 
 + 
 +<code> 
 +-- Su server1 
 +USE exampledb; 
 +FLUSH TABLES WITH READ LOCK; 
 +SHOW MASTER STATUS; 
 +-- Prendere nota dello status. 
 +-- Fare un dump e copiarlo sull'altro host. 
 +UNLOCK TABLES; 
 + 
 +-- Su server2 
 +-- mysqladmin --user=root --password stop-slave 
 +CREATE DATABASE exampledb; 
 +-- mysql -u root -p exampledb < exampledb.sql 
 +USE exampledb; 
 +FLUSH TABLES WITH READ LOCK; 
 +SHOW MASTER STATUS; 
 +-- Prendere nota dello status. 
 +UNLOCK TABLES; 
 +CHANGE MASTER TO MASTER_HOST='192.168.3.71', MASTER_USER='slave2_user', 
 +    MASTER_PASSWORD='slave2_password', MASTER_LOG_FILE='mysql-bin.000001', 
 +    MASTER_LOG_POS=106; 
 +START SLAVE; 
 +SHOW SLAVE STATUS; 
 + 
 +-- Su server1 
 +STOP SLAVE; 
 +CHANGE MASTER TO MASTER_HOST='192.168.3.73', MASTER_USER='slave1_user', 
 +    MASTER_PASSWORD='slave1_password', MASTER_LOG_FILE='mysql-bin.000001', 
 +    MASTER_LOG_POS=2359; 
 +START SLAVE; 
 +SHOW SLAVE STATUS; 
 +</code> 
 +===== Verifica dello stato SLAVE ===== 
 + 
 +Come utente Unix root ci si collega al database MASTER/SLAVE: 
 + 
 +<code> 
 +mysql dbname 
 +</code> 
 + 
 +Per vedere lo stato di slave: 
 + 
 +<code sql> 
 +SHOW STATUS LIKE 'Slave_running'; 
 +</code> 
 + 
 +<code> 
 ++---------------+-------+ 
 +| Variable_name | Value | 
 ++---------------+-------+ 
 +| Slave_running | ON    | 
 ++---------------+-------+ 
 +</code> 
 + 
 +Per verificare lo stato di slave e in particolare il numero di log in corso di replica (**Relay_Master_Log_File**): 
 + 
 +<code sql> 
 +SHOW SLAVE STATUS\G; 
 +</code> 
 + 
 +<code> 
 +MariaDB [dbname]> SHOW SLAVE STATUS\G; 
 +*************************** 1. row *************************** 
 +               Slave_IO_State: Waiting for master to send event 
 +                  Master_Host: 172.16.2.163 
 +                  Master_User: replication 
 +                  Master_Port: 3306 
 +                Connect_Retry: 60 
 +              Master_Log_File: mariadb-bin.004356 
 +          Read_Master_Log_Pos: 845159197 
 +               Relay_Log_File: relay-bin.012490 
 +                Relay_Log_Pos: 819964666 
 +        Relay_Master_Log_File: mariadb-bin.004300 
 +             Slave_IO_Running: Yes 
 +            Slave_SQL_Running: Yes 
 +              Replicate_Do_DB:  
 +          Replicate_Ignore_DB:  
 +           Replicate_Do_Table:  
 +       Replicate_Ignore_Table:  
 +      Replicate_Wild_Do_Table:  
 +  Replicate_Wild_Ignore_Table:  
 +                   Last_Errno:
 +                   Last_Error:  
 +                 Skip_Counter:
 +          Exec_Master_Log_Pos: 819964380 
 +              Relay_Log_Space: 61048049539 
 +              Until_Condition: None 
 +               Until_Log_File:  
 +                Until_Log_Pos:
 +           Master_SSL_Allowed: No 
 +           Master_SSL_CA_File:  
 +           Master_SSL_CA_Path:  
 +              Master_SSL_Cert:  
 +            Master_SSL_Cipher:  
 +               Master_SSL_Key:  
 +        Seconds_Behind_Master: 6789 
 +Master_SSL_Verify_Server_Cert: No 
 +                Last_IO_Errno:
 +                Last_IO_Error:  
 +               Last_SQL_Errno:
 +               Last_SQL_Error:  
 +  Replicate_Ignore_Server_Ids:  
 +             Master_Server_Id:
 +</code> 
 + 
 +Se **durante la sincronizzazione uno statement fallisce** si vede l'errore. È possibile far ripartire la sincronizzazione saltando un singolo statement con i comandi: 
 + 
 +<code sql> 
 +STOP SLAVE; 
 +SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
 +START SLAVE; 
 +</code> 
 ===== Crash test ===== ===== Crash test =====
  
doc/appunti/linux/sa/mysql_replica_master_master.1315479029.txt.gz · Last modified: 2011/09/08 12:50 by niccolo