Replicatie wordt gebruikt om twee of meer databases gesynchroniseerd te houden door uitgevoerde DML-/statement- of datasetwijzigingen te repliceren van een masterserver naar een of meerdere slaveservers.
Er zijn drie methoden om de gegevens voor replicatie vast te leggen:Statement-based replication (SBR) repliceert SQL-instructies die gegevens wijzigen. Op rijen gebaseerde replicatie (RBR) repliceert alleen de gewijzigde rijen. Mixed-based replication (MBR) is replicatie op basis van instructies en replicatie op basis van rijen. Vroeger voor alle versies van mysqld, is replicatie op basis van instructies de standaardmethode voor offlogging. Vrijwel alle opslag-engines ondersteunen alle drie de benaderingen voor het loggen van gegevens.
MySQL Master-Master-replicatie schaalt het systeem op en verbetert de prestaties door de overhead van de back-up te verminderen en redundantie te bieden voor de actieve toepassing. Als je niet krijgt wat het is, is het net als twee MySQL-servers die elkaar up-to-date houden. Bij replicatie fungeren twee afzonderlijke MySQL-servers als een cluster. Databaseclustering is vooral geschikt voor applicatieconfiguraties met hoge beschikbaarheid
Master/master-replicatie wordt bereikt door ServerA in te stellen als slaaf van ServerB en ServerB in te stellen als slaaf van ServerA.
Aanname: Dit artikel bevat niet de stappen voor de installatie van de MySQL-server, ik ga ervan uit dat de Mysql-server (single instance) op beide servers is geïnstalleerd:
Om een MySQL-master naar master-replicatie op Linux-servers te configureren, hebben we twee servers nodig, de informatie is als volgt:
server A :192.168.1.2
server B: 192.168.1.3
OS: RHL 6.4 x86_64
MySQL-server: 5.6.17 x86_64
Voorcontroles:
Schakel de firewall uit op beide servers:
service iptables stop chkconfig iptables off service iptables status
Beide servers moeten voor elkaar toegankelijk zijn. Om de toegankelijkheid te controleren, pingt elke server.
Geef commentaar op het kenmerk bind-address of stel het in op (bind-address=0.0.0.0) in het bestand my.sandbox.cnf of my.cnf op beide servers. Ik heb my.sandbox.cnf genoemd, dit voor het geval je gebruik maakt van MySQL::Sandbox
Eerst zullen we replicatie van server B naar A inschakelen
STAP 1:
OP server A:192.168.1.2
bewerk my.sandbox.cnf of my.cnf en voeg onderstaande waarden toe server-id moet> 0 zijn; als je de locatie van het my.cnf-bestand niet weet, gebruik dan deze opdracht op os shell “mysql –help | grep mijn.cnf”, meestal bevindt mijn.cnf zich in de /etc/ directory
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
OP server B:192.168.1.3
bewerk my.sandbox.cnf of my.cnf en voeg onderstaande waarden toe server-id moet> 0 zijn;
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
STAP 2:
OP 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;
Op 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;
STAP 3:
OP 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 | | | | +------------------+----------+--------------+------------------+-------------------+
OP 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;
Nu zul je denken van waar ik de waarden voor deze attributen kies, maak je geen zorgen, ik leg het uit, kies de MASTER_PORT-waarde uit de bovenstaande query (SHOW GLOBAL VARIABLES LIKE 'PORT') in dit geval is onze poort 5617 , Kies de MASTER_LOG_FILE-waarde uit de kolom Bestand in de bovenstaande query ("show masterstatus;") dat is Mysql-bin.000002), Kies de MASTER_LOG_POS-waarde uit de kolompositie in de bovenstaande query, dat is 423)
STAP 4:
Nu kunt u de slave starten
mysql>start salve: mysql> show slave status \G;
NU replicatie van B naar A is ingeschakeld
STAP 5
In deze stap testen we de replicatie van server B naar A:
OP 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);
OP SLAVE:192.168.1.2 (server A)
show schemas; use reptest; select * from reptest.simples;
Nu gaan we replicatie van server A naar B inschakelen
STAP 6:
OP 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)
OP 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;
Kies de MASTER_PORT-waarde uit de bovenstaande query (SHOW GLOBAL VARIABLES LIKE 'PORT') in dit geval is onze poort 5617. Kies de MASTER_LOG_FILE-waarde uit de kolom Bestand in de bovenstaande query ("show masterstatus;") dat is Mysql-bin .000004), kies de MASTER_LOG_POS-waarde uit de kolompositie in de bovenstaande query die 120 is)
Nu kunt u de slave starten
mysql> show slave status \G; mysql>start salve: mysql> show slave status \G;
STAP 7
OK, dus onze omgeving is ingesteld, Nu gaan we testen of onze omgeving werkt of niet.
OP 192.168.1.2 (server A)
insert into reptest.simples values (777),(41),(15),(61);
Hier hebben we de tabel niet eenvoudig gemaakt in DB-naam reptest, omdat deze al naar server A was gerepliceerd toen de DB reptest en tabel op server B werd gemaakt.
OP 192.168.1.3 (Server B)
use reptest; select * from reptest.simples;
Hoera!! je kunt zien dat alles is ingesteld en dat onze Master naar Master-replicatie is ingesteld.
WAARSCHUWING: Het is niet slim om uw applicatie DML tegelijkertijd op beide servers te laten uitvoeren. Schrijven naar beide servers tegelijk zorgt voor een redelijk duurzame snelle failover voor hoge beschikbaarheid, maar levert geen prestatiewinst op. Beide servers moeten alle DML uitvoeren, of de DML nu rechtstreeks van clients komt of via replicatie