Replikacja służy do utrzymywania synchronizacji dwóch lub większej liczby baz danych poprzez replikację wykonanych DML/instrukcji lub zmian zestawu danych z serwera głównego na jeden lub wiele serwerów podrzędnych.
Istnieją trzy metody rejestrowania danych do replikacji:Replikacja oparta na instrukcjach (SBR) replikuje instrukcje SQL modyfikujące dane. Replikacja oparta na wierszach (RBR) replikuje tylko zmienione wiersze. Replikacja mieszana (MBR) to replikacja oparta na instrukcjach i replikacja oparta na wierszach. Dawniej dla wszystkich wersji mysqld replikacja oparta na instrukcjach była domyślną metodą offlogging. Prawie wszystkie silniki pamięci masowej obsługują wszystkie trzy podejścia do rejestrowania danych.
Replikacja MySQL Master-Master skaluje system i poprawia wydajność, zmniejszając obciążenie kopii zapasowej i zapewniając nadmiarowość aktywnej aplikacji. Jeśli nie dostajesz tego, co to jest, to tak jak dwa serwery MySQL, które aktualizują się nawzajem. Dzięki replikacji dwa oddzielne serwery MySQL działają jako klaster. Klastrowanie baz danych jest odpowiednie głównie w przypadku konfiguracji aplikacji o wysokiej dostępności
Replikacja master/master jest osiągana przez ustawienie Serwera A jako podrzędnego Serwera B i ustawienie Serwera B jako podrzędnego Serwera A.
Założenie: Ten artykuł nie zawiera kroków instalacji serwera MySQL, zakładam, że serwer Mysql (pojedyncza instancja) został zainstalowany na obu serwerach:
Aby skonfigurować mastera MySQL do obsługi replikacji na serwerach Linux, potrzebujemy dwóch serwerów, informacje są następujące:
serwer A :192.168.1.2
serwer B: 192.168.1.3
System operacyjny: RHL 6,4 x86_64
Serwer MySQL: 5.6.17 x86_64
Kontrole wstępne:
Wyłącz zaporę na obu serwerach:
service iptables stop chkconfig iptables off service iptables status
Oba serwery powinny być dostępne dla siebie. Aby sprawdzić dostępność, pinguj każdy serwer.
Zakomentuj atrybut adresu wiązania lub ustaw go na (adres wiązania =0.0.0.0) w pliku my.sandbox.cnf lub my.cnf na obu serwerach. Wspomniałem o my.sandbox.cnf, na wypadek, gdybyś używał MySQL::Sandbox
Najpierw włączymy replikację z serwera B do A
KROK 1:
WŁĄCZONY serwer A:192.168.1.2
edytuj my.sandbox.cnf lub my.cnf i dodaj poniższe wartości server-id powinno być> 0; jeśli nie znasz lokalizacji pliku my.cnf, użyj tego polecenia w powłoce systemu operacyjnego „mysql –help | grep my.cnf”, zwykle my.cnf znajduje się w katalogu /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 serwerze B:192.168.1.3
edytuj my.sandbox.cnf lub my.cnf i dodaj poniższe wartości server-id powinno być> 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:
WŁĄCZONY serwer 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 serwerze 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 SERWERZE 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 SERWERZE 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;
Teraz będziesz się zastanawiać, skąd wybieram wartości dla tych atrybutów, nie martw się, wyjaśniam to, Wybierz wartość MASTER_PORT z powyższego zapytania (SHOW GLOBAL VARIABLES LIKE 'PORT') w tym przypadku nasz port to 5617 , Wybierz wartość MASTER_LOG_FILE z kolumny Plik w powyższym zapytaniu („pokaż status główny;”), czyli Mysql-bin.000002), Wybierz wartość MASTER_LOG_POS z pozycji kolumny w powyższym zapytaniu, czyli 423)
KROK 4:
Teraz możesz uruchomić urządzenie podrzędne
mysql>start salve: mysql> show slave status \G;
TERAZ replikacja z B do A została włączona
KROK 5
W tym kroku przetestujemy replikację z serwera B na A:
ON MASTER (serwer 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);
W PODRĘCZNIKU:192.168.1.2 (serwer A)
show schemas; use reptest; select * from reptest.simples;
Teraz włączymy replikację z serwera A na B
KROK 6:
NA SERWERZE 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 SERWERZE 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;
Wybierz wartość MASTER_PORT z powyższego zapytania (SHOW GLOBAL VARIABLES LIKE 'PORT') w tym przypadku nasz port to 5617, wybierz wartość MASTER_LOG_FILE z kolumny File w powyższym zapytaniu („pokaż status master;”), czyli Mysql-bin .000004), Wybierz wartość MASTER_LOG_POS z pozycji kolumny w powyższym zapytaniu, czyli 120)
Teraz możesz uruchomić urządzenie podrzędne
mysql> show slave status \G; mysql>start salve: mysql> show slave status \G;
KROK 7
OK, więc nasze środowisko jest ustawione. Teraz sprawdzimy, czy nasze środowisko działa, czy nie.
WŁ 192.168.1.2 (serwer A)
insert into reptest.simples values (777),(41),(15),(61);
Tutaj nie utworzyliśmy prostej tabeli w reptest nazwy bazy danych, ponieważ została ona już zreplikowana na serwer A podczas tworzenia reptestu bazy danych i tabeli na serwerze B.
WŁ 192.168.1.3 (Serwer B)
use reptest; select * from reptest.simples;
Hurra!! widać, że wszystko jest ustawione i nasza replikacja Master to Master jest ustawiona.
OSTRZEŻENIE: Nie jest mądre, aby Twoja aplikacja wykonywała DML na obu serwerach w tym samym czasie. Zapis na obu serwerach w tym samym czasie zapewnia dość trwałe szybkie przełączanie awaryjne w celu zapewnienia wysokiej dostępności, ale nie zwiększa wydajności. Oba serwery muszą wykonywać wszystkie DML, niezależnie od tego, czy DML pochodzi bezpośrednio od klientów, czy pochodzi z replikacji