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

Next revision
Previous revision
doc:appunti:linux:sa:mysql_replica_master_master [2011/09/08 12:48] – created 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 ======
 +
 +Riferimenti web:
 +
 +  * **[[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: 0
 +                   Last_Error: 
 +                 Skip_Counter: 0
 +          Exec_Master_Log_Pos: 819964380
 +              Relay_Log_Space: 61048049539
 +              Until_Condition: None
 +               Until_Log_File: 
 +                Until_Log_Pos: 0
 +           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: 0
 +                Last_IO_Error: 
 +               Last_SQL_Errno: 0
 +               Last_SQL_Error: 
 +  Replicate_Ignore_Server_Ids: 
 +             Master_Server_Id: 2
 +</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.1315478898.txt.gz · Last modified: 2011/09/08 12:48 by niccolo