sql >> Databáze >  >> RDS >> Mysql

MySQL Master to Master replikace

Replikace se používá k udržení synchronizace dvou nebo více databází replikací provedených změn DML/příkazů nebo datových sad z hlavního serveru na jeden nebo více podřízených serverů.

Existují tři způsoby protokolování dat pro replikaci:Replikace založená na příkazech (SBR) replikuje příkazy SQL, které upravují data. Replikace na základě řádků (RBR) replikuje pouze změněné řádky. Smíšená replikace (MBR) je replikace založená na příkazech a replikace založená na řádcích. Dříve pro všechny verze mysqld byla replikace založená na příkazech výchozí metodou oddělování. Naprosto všechny moduly úložiště podporují všechny tři přístupy k protokolování dat.

Replikace MySQL Master-Master rozšiřuje systém a zlepšuje výkon tím, že snižuje režii zálohování a poskytuje redundanci pro aktivní aplikaci. Pokud nechápete, co to je, je to jako dva servery MySQL, které se navzájem aktualizují. Při replikaci fungují dva samostatné servery MySQL jako cluster. Klastrování databáze je vhodné především pro konfigurace aplikací s vysokou dostupností

Master/master replikace je dosaženo nastavením ServerA jako slave ServeruB a nastavením ServerB jako slave ServerA.

Předpoklad: Tento článek neposkytuje kroky pro instalaci serveru MySQL, předpokládám, že server MySQL (jedna instance) byl nainstalován na obou serverech:

Ke konfiguraci hlavního serveru MySQL pro řízení replikace na serverech Linux potřebujeme dva servery, informace jsou následující:

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

Předběžné kontroly:

Deaktivujte bránu firewall na obou serverech:

service iptables stop
chkconfig iptables off
service iptables status

Oba servery by měly být vzájemně přístupné. Aby bylo možné zkontrolovat dostupnost, ping na každý server.

Zakomentujte atribut bind-address nebo jej nastavte na (bind-address=0.0.0.0) v souboru my.sandbox.cnf nebo my.cnf na obou serverech. Zmínil jsem my.sandbox.cnf, to pro případ, že používáte MySQL::Sandbox

Nejprve povolíme replikaci ze serveru B na A

KROK 1:
NA serveru A:192.168.1.2

upravte my.sandbox.cnf nebo my.cnf a přidejte níže hodnoty server-id by mělo být> 0; v případě, že neznáte umístění souboru my.cnf, použijte tento příkaz na os shell „mysql –help | grep my.cnf“, obvykle je my.cnf v adresáři /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

NA serveru B:192.168.1.3

upravte my.sandbox.cnf nebo my.cnf a přidejte níže hodnoty server-id by mělo být> 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

KROK 2:
NA serveru 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;
Na serveru 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;
KROK 3:
NA SERVERU 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 | |             | |
+------------------+----------+--------------+------------------+-------------------+

NA SERVERU 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; 

Nyní budete přemýšlet, odkud vybírám hodnoty pro tyto atributy, nebojte se, vysvětluji to, vyberte hodnotu MASTER_PORT  z výše uvedeného dotazu (ZOBRAZIT GLOBÁLNÍ PROMĚNNÉ JAKO 'PORT'), v tomto případě je náš port 5617 , Vyberte hodnotu MASTER_LOG_FILE ze sloupce File ve výše uvedeném dotazu („show master status;“), což je  Mysql-bin.000002), vyberte hodnotu MASTER_LOG_POS z pozice sloupce ve výše uvedeném dotazu, což je 423)

KROK 4:

Nyní můžete spustit slave

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

NYNÍ byla povolena replikace z B do A

KROK 5 

V tomto kroku otestujeme replikaci ze serveru B na A:

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

Nyní povolíme replikaci ze serveru A na B

KROK 6:
NA SERVERU 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)

NA SERVERU 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; 

Vyberte hodnotu MASTER_PORT  z výše uvedeného dotazu (ZOBRAZIT GLOBÁLNÍ PROMĚNNÉ JAKO 'PORT'), v tomto případě je náš port 5617. Vyberte hodnotu MASTER_LOG_FILE ze sloupce Soubor ve výše uvedeném dotazu („zobrazit hlavní stav;“), což je  Mysql-bin .000004), vyberte hodnotu MASTER_LOG_POS z pozice sloupce ve výše uvedeném dotazu, což je 120)

Nyní můžete spustit slave

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

KROK 7

OK, takže naše prostředí je nastaveno. Nyní otestujeme, zda naše prostředí funguje nebo ne.

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

Zde jsme nevytvořili jednoduchou tabulku v reptestu názvů DB, protože již byla replikována na server A při vytváření reptestu DB a tabulky na serveru B.

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

Hurá!! můžete vidět, že je vše nastaveno a naše replikace Master to Master je nastavena.

UPOZORNĚNÍ: Není rozumné, aby vaše aplikace spouštěla ​​DML na obou serverech současně. Zápis na oba servery současně zajišťuje přiměřeně trvanlivé rychlé převzetí služeb při selhání pro vysokou dostupnost, ale nepřináší žádné zvýšení výkonu. Oba servery musí provádět veškeré DML, ať už DML pocházejí přímo od klientů nebo přicházejí prostřednictvím replikace


  1. Více omezení v tabulce:Jak získat všechna porušení?

  2. Mám v MySQL použít datový typ datetime nebo timestamp?

  3. Parametry připojovacího řetězce pro uložené specifikace

  4. Jak implementovat LIMIT s SQL Server?