sql >> Database teknologi >  >> RDS >> Mysql

MySQL Master To Master Replikering

Replikering bruges til at holde to eller flere databaser synkroniserede ved at replikere enten udførte DML/udsagn eller datasætændringer fra en masterserver til en eller flere slaveservere.

Der er tre metoder til at logge data til replikering:Statement-based replikering (SBR) replikerer SQL-sætninger, der ændrer data. Rækkebaseret replikering (RBR) replikerer kun de ændrede rækker. Blandet-baseret replikering (MBR) er sætningsbaseret replikering og rækkebaseret replikering. Tidligere for alle versioner af mysqld, er sætningsbaseret replikering standardmetoden for offlogging. Stort set alle lagringsmotorer understøtter alle tre tilgange til logning af data.

MySQL Master-Master-replikering skalerer systemet op og forbedrer ydeevnen ved at reducere overhead af backup og sørge for redundans for den aktive applikation. Hvis du ikke får, hvad det er, er det ligesom to MySQL-servere, der holder hinanden opdateret. Med replikering fungerer to separate MySQL-servere som en klynge. Databaseklynger er hovedsageligt velegnet til applikationskonfigurationer med høj tilgængelighed

Master/master replikering opnås ved at konfigurere ServerA til at være en slave af ServerB og opsætte ServerB til at være en slave af ServerA.

Antagelse: Denne artikel indeholder ikke trinene til installation af MySQL-server, jeg antager, at Mysql-server (enkelt forekomst) er installeret på begge servere:

For at konfigurere en MySQL-master til at mestre replikering på Linux-servere har vi brug for to servere, information er som følgende:

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

Forhåndstjek:

Deaktiver firewallen på begge servere:

service iptables stop
chkconfig iptables off
service iptables status

Begge servere skal være tilgængelige for hinanden, for at kontrollere tilgængeligheden ping hver server.

Kommenter bind-adresse-attributten eller sæt den til (bind-adresse=0.0.0.0) i filen my.sandbox.cnf eller my.cnf på begge servere. Jeg har nævnt my.sandbox.cnf, dette for hvis du bruger MySQL::Sandbox

Først vil vi aktivere replikering fra server B til A

TRIN 1:
PÅ server A:192.168.1.2

rediger my.sandbox.cnf eller my.cnf og tilføj værdierne nedenfor, server-id skal være> 0; hvis du ikke kender placeringen af ​​filen my.cnf, brug denne kommando på os shell "mysql -help | grep my.cnf”, normalt er my.cnf i /etc/-mappen

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

PÅ server B:192.168.1.3

rediger my.sandbox.cnf eller my.cnf og tilføj værdierne nedenfor, server-id skal være> 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

TRIN 2:
PÅ 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;
På 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;
TRIN 3:
PÅ 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 | |             | |
+------------------+----------+--------------+------------------+-------------------+

PÅ 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 vil du tænke, hvorfra jeg vælger værdierne for disse attributter, bare rolig, jeg forklarer det, vælg MASTER_PORT værdien fra ovenstående forespørgsel (VIS GLOBALE VARIABLER SOM 'PORT') i dette tilfælde er vores port 5617 , Vælg MASTER_LOG_FILE-værdien fra kolonnen Fil i ovenstående forespørgsel ("vis masterstatus;"), dvs.  Mysql-bin.000002), vælg MASTER_LOG_POS-værdien fra kolonnepositionen i ovenstående forespørgsel, som er 423)

TRIN 4:

Nu kan du starte slaven

mysql>start salve:
mysql> show slave status \G;

NU er replikering fra B til A blevet aktiveret

TRIN 5 

I dette trin tester vi replikeringen fra server B til A:

PÅ 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);
PÅ SLAVE:192.168.1.2 (server A)
show schemas;
use reptest;
select * from reptest.simples;

Nu vil vi aktivere replikering fra server A til B

TRIN 6:
PÅ 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)

PÅ 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; 

Vælg MASTER_PORT -værdien fra ovenstående forespørgsel (VIS GLOBALE VARIABLER SOM 'PORT') i dette tilfælde er vores port 5617, vælg MASTER_LOG_FILE-værdien fra kolonnen Fil i ovenstående forespørgsel ("vis masterstatus;"), som er  Mysql-bin .000004), vælg MASTER_LOG_POS-værdien fra kolonnepositionen i ovenstående forespørgsel, som er 120)

Nu kan du starte slaven

mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;

TRIN 7

OK, så vores miljø er indstillet, nu skal vi teste, om vores miljø fungerer eller ej.

PÅ 192.168.1.2 (server A)
insert into reptest.simples values (777),(41),(15),(61);

Her har vi ikke oprettet tabellen simpelt i DB-navn-reptest, da den allerede blev replikeret til server A, da DB-reptesten og tabellen blev oprettet på server B.

PÅ 192.168.1.3  (Server B)
use reptest;
select * from reptest.simples;

Hurra!! du kan se, at alt er indstillet, og vores Master to Master-replikering er indstillet.

ADVARSEL: Det er ikke smart at have din applikation til at udføre DML på begge servere på samme tid. At skrive til begge servere på samme tid giver en rimelig holdbar hurtig failover for høj tilgængelighed, men har ingen præstationsgevinster. Begge servere skal udføre al DML, uanset om DML kommer direkte fra klienter eller kommer via replikering


  1. MySQL, Få brugerrangering

  2. PL/SQL-samling:Indlejret tabel i Oracle-database

  3. Sådan konverteres en streng til hexadecimal i MySQL – HEX()

  4. Kom godt i gang med Cloud Firestore til iOS