Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL Master do opanowania replikacji

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najbardziej wydajny sposób przechowywania adresu IP w MySQL

  2. MySQL konwertuje ciąg daty na uniksowy znacznik czasu

  3. Zabezpieczanie serwera MySQL

  4. Korzystanie z wyzwalaczy MySQL

  5. Maksymalny czas wykonania w phpMyadmin