sql >> Databasteknik >  >> RDS >> Mysql

MySQL Master To Master Replikering

Replikering används för att hålla två eller flera databaser synkroniserade genom att replikera antingen exekverad DML/sats eller datauppsättningsändringar från en masterserver till en eller flera slavservrar.

Det finns tre metoder för att logga data för replikering:Utlåtandebaserad replikering (SBR) replikerar SQL-satser som modifierar data. Radbaserad replikering (RBR) replikerar endast de ändrade raderna. Mixed-based repplication (MBR) är satsbaserad replikering och radbaserad replikering. Tidigare för alla versioner av mysqld var satsbaserad replikering standardmetoden för avloggning. Nästan alla lagringsmotorer stöder alla tre metoderna för att logga data.

MySQL Master-Master-replikering skalar upp systemet och förbättrar prestandan genom att minska omkostnaderna för säkerhetskopieringen och tillhandahålla redundans för den aktiva applikationen. Om du inte förstår vad det är, är det precis som att två MySQL-servrar håller varandra uppdaterade. Med replikering fungerar två separata MySQL-servrar som ett kluster. Databasklustring är främst lämplig för applikationskonfigurationer med hög tillgänglighet

Master/master replikering uppnås genom att ställa in ServerA för att vara en slav av ServerB och ställa in ServerB för att vara en slav av ServerA.

Antagande: Den här artikeln innehåller inte stegen för installation av MySQL-server, jag antar att Mysql-server (en instans) har installerats på båda servrarna:

För att konfigurera en MySQL-master för att behärska replikering på Linux-servrar behöver vi två servrar, informationen är som följer:

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

Förhandskontroller:

Inaktivera brandväggen på båda servrarna:

service iptables stop
chkconfig iptables off
service iptables status

Båda servrarna bör vara tillgängliga för varandra, för att kontrollera tillgängligheten pinga varje server.

Kommentera ut bind-adress-attributet eller ställ in det till (bind-adress=0.0.0.0) i filen my.sandbox.cnf eller my.cnf på båda servrarna. Jag har nämnt my.sandbox.cnf, detta för om du använder MySQL::Sandbox

Först kommer vi att aktivera replikering från server B till A

STEG 1:
PÅ server A:192.168.1.2

redigera my.sandbox.cnf eller my.cnf och lägg till nedanstående värden server-id ska vara> 0; om du inte vet var my.cnf-filen är använd detta kommando på OS-skalet "mysql -help | grep my.cnf”, vanligtvis finns my.cnf i /etc/-katalogen

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

redigera my.sandbox.cnf eller my.cnf och lägg till nedanstående värden server-id ska vara> 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

STEG 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;
STEG 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 kommer du att tänka varifrån jag väljer värdena för dessa attribut, oroa dig inte, jag förklarar det, välj MASTER_PORT värdet från ovanstående fråga (VISA GLOBAL VARIABLER SOM "PORT") i det här fallet är vår port 5617 , Välj MASTER_LOG_FILE-värdet från kolumnen File i ovanstående fråga ("show master status;") som är  Mysql-bin.000002), Välj MASTER_LOG_POS-värdet från kolumnpositionen i frågan ovan som är 423)

STEG 4:

Nu kan du starta slaven

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

NU har replikering från B till A aktiverats

STEG 5 

I det här steget kommer vi att testa replikeringen från server B till 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Å SLAV:192.168.1.2 (server A)
show schemas;
use reptest;
select * from reptest.simples;

Nu kommer vi att aktivera replikering från server A till B

STEG 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älj MASTER_PORT -värdet från frågan ovan (VISA GLOBALA VARIABLER SOM 'PORT') i det här fallet är vår port 5617, välj MASTER_LOG_FILE-värdet från kolumnen Fil i ovanstående fråga ("visa huvudstatus;") som är  Mysql-bin .000004), välj MASTER_LOG_POS-värdet från kolumnpositionen i ovanstående fråga som är 120)

Nu kan du starta slaven

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

STEG 7

OK så vår miljö är inställd, nu ska vi testa om vår miljö fungerar eller inte.

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

Här har vi inte skapat tabellen enkelt i DB-namnreptest eftersom den redan replikerades till server A när DB-reptestet och tabellen skapades på server B.

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

Hurra!! du kan se att allt är inställt och vår Master to Master-replikering är inställd.

VARNING: Det är inte smart att ha din applikation som kör DML på båda servrarna samtidigt. Att skriva till båda servrarna samtidigt ger en någorlunda hållbar snabb failover för hög tillgänglighet men har inga prestandavinster. Båda servrarna måste utföra all DML, oavsett om DML kommer direkt från klienter eller kommer via replikering


  1. Hur Sin() fungerar i PostgreSQL

  2. Skapa en SQL Server-tabell från en C#-datatabell

  3. PostgreSQL latitud longitud fråga

  4. Är SELECT eller INSERT i en funktion utsatt för tävlingsförhållanden?