La replica viene utilizzata per mantenere sincronizzati due o più database replicando le modifiche DML/statement o set di dati eseguite da un server master a uno o più server slave.
Esistono tre metodi per registrare i dati per la replica:La replica basata su istruzioni (SBR) replica le istruzioni SQL che modificano i dati. La replica basata su riga (RBR) replica solo le righe modificate. La replica mista (MBR) è la replica basata su istruzioni e la replica basata su riga. Precedentemente per tutte le versioni di mysqld, la replica basata su istruzioni è il metodo di offlogging predefinito. Quasi tutti i motori di archiviazione supportano tutti e tre gli approcci alla registrazione dei dati.
La replica MySQL Master-Master aumenta la scalabilità del sistema e migliora le prestazioni riducendo il sovraccarico del backup e fornendo ridondanza per l'applicazione attiva. Se non ottieni quello che c'è, è proprio come due server MySQL che si tengono aggiornati a vicenda. Con la replica, due server MySQL separati agiscono come un cluster. Il clustering di database è adatto principalmente per configurazioni di applicazioni ad alta disponibilità
La replica master/master si ottiene impostando ServerA come slave di ServerB e configurando ServerB come slave di ServerA.
Presupposto: Questo articolo non fornisce i passaggi per l'installazione del server MySQL, presumo che il server Mysql (istanza singola) sia stato installato su entrambi i server:
Per configurare un master MySQL per la replica master sui server Linux abbiamo bisogno di due server, le informazioni sono come le seguenti:
server A :192.168.1.2
server B: 192.168.1.3
OS: RHL 6.4 x86_64
Server MySQL: 5.6.17 x86_64
Controlli preliminari:
Disabilita il firewall su entrambi i server:
service iptables stop chkconfig iptables off service iptables status
Entrambi i server dovrebbero essere accessibili tra loro, per verificare l'accessibilità esegui il ping di ciascun server.
Commenta l'attributo bind-address o impostalo su (bind-address=0.0.0.0) nel file my.sandbox.cnf o my.cnf su entrambi i server. Ho menzionato my.sandbox.cnf, questo nel caso tu stia utilizzando MySQL::Sandbox
In primo luogo, abiliteremo la replica dal server B ad A
PASSAGGIO 1:
SUL server A:192.168.1.2
modifica my.sandbox.cnf o my.cnf e aggiungi sotto i valori server-id dovrebbe essere> 0; nel caso in cui non conosci la posizione del file my.cnf usa questo comando su os shell “mysql –help | grep my.cnf”, di solito my.cnf si trova nella directory /etc/
server-id=1 replicate-same-server-id=0 auto-increment-increment=2 auto-increment-offset=1 relay-log=serverA-relay-bin relay-log-index=serverA-relay-bin.index master-info-file=mysqk-master.info relay-log-info-file=serverA-relay-log.info log-bin=mysql-bin
SUL server B:192.168.1.3
modifica my.sandbox.cnf o my.cnf e aggiungi sotto i valori server-id dovrebbe essere> 0;
server-id=2 replicate-same-server-id=0 auto-increment-increment=2 auto-increment-offset=2 relay-log=serverB-relay-bin relay-log-index=serverB-relay-bin.index master-info-file=mysqk-master.info relay-log-info-file=serverB-relay-log.info log-bin=mysql-bin
PASSAGGIO 2:
SUL server A:192.168.1.2
create user 'syncstndby' identified by 'warsaw'; grant replication slave on *.* to 'syncstndby'@'192.168.1.3' identified by 'warsaw'; flush privileges;
Sul server B:192.168.1.3
create user 'syncstndby' identified by 'warsaw'; grant replication slave on *.* to 'syncstndby'@'192.168.1.2' identified by 'warsaw'; flush privileges;
PASSAGGIO 3:
SUL SERVER B:192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 5617 | +---------------+-------+ 1 row in set (0.00 sec) mysql > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 423 | | | | +------------------+----------+--------------+------------------+-------------------+
SUL SERVER A:192.168.1.2
CHANGE MASTER TO MASTER_HOST='192.168.1.3', MASTER_USER='syncstndby', MASTER_PASSWORD='warsaw', MASTER_PORT= 5617, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=423;
Ora penserai da dove sto selezionando i valori per questi attributi, non preoccuparti, lo sto spiegando, scegli il valore MASTER_PORT dalla query sopra (MOSTRA VARIABILI GLOBALI COME 'PORT') in questo caso, la nostra porta è 5617 , Scegli il valore MASTER_LOG_FILE dalla colonna File nella query precedente ("show master status;") ovvero Mysql-bin.000002), Scegli il valore MASTER_LOG_POS dalla posizione della colonna nella query precedente che è 423)
PASSAGGIO 4:
Ora puoi avviare lo slave
mysql>start salve: mysql> show slave status \G;
ORA la replica da B ad A è stata abilitata
PASSAGGIO 5
In questo passaggio testeremo la replica dal server B ad A:
SU MASTER (server B):192.168.1.3
show schemas; create database reptest; create table reptest.simples (id int not null primary key) ; insert into reptest.simples values (999),(1),(2),(3);
IN SLAVE:192.168.1.2 (server A)
show schemas; use reptest; select * from reptest.simples;
Ora abiliteremo la replica dal server A al server B
PASSAGGIO 6:
SUL SERVER A:192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 5617 | +---------------+-------+ 1 row in set (0.00 sec) mysql > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
SUL SERVER B:192.168.1.3
CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='syncstndby', MASTER_PASSWORD='warsaw', MASTER_PORT= 5617, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
Scegli il valore MASTER_PORT dalla query sopra (MOSTRA VARIABILI GLOBALI COME 'PORT') in questo caso, la nostra porta è 5617, scegli il valore MASTER_LOG_FILE dalla colonna File nella query sopra ("mostra lo stato master;") che è Mysql-bin .000004), scegli il valore MASTER_LOG_POS dalla posizione della colonna nella query precedente che è 120)
Ora puoi avviare lo slave
mysql> show slave status \G; mysql>start salve: mysql> show slave status \G;
PASSAGGIO 7
OK, quindi il nostro ambiente è impostato, ora testeremo se il nostro ambiente funziona o meno.
ON 192.168.1.2 (server A)
insert into reptest.simples values (777),(41),(15),(61);
Qui non abbiamo creato la tabella semplice nel reptest del nome DB poiché era già stata replicata sul server A quando è stato creato il reptest del DB e la tabella sul server B.
ON 192.168.1.3 (Server B)
use reptest; select * from reptest.simples;
Evviva!! puoi vedere che tutto è impostato e la nostra replica da Master a Master è impostata.
AVVISO: Non è intelligente che la tua applicazione esegua DML su entrambi i server contemporaneamente. La scrittura su entrambi i server contemporaneamente consente un failover veloce ragionevolmente durevole per un'elevata disponibilità, ma non offre miglioramenti delle prestazioni. Entrambi i server devono eseguire tutti i DML, indipendentemente dal fatto che il DML provenga direttamente dai client o provenga tramite replica