Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Master To Master репликация

Репликацията се използва за поддържане на синхронизиране на две или повече бази данни чрез репликиране на изпълнени промени в DML/изявление или набор от данни от главен сървър към един или множество подчинени сървъри.

Има три метода за регистриране на данните за репликация:Базираната на заявления репликация (SBR) репликира SQL изрази, които променят данните. Репликацията, базирана на редове (RBR) репликира само променените редове. Смесената репликация (MBR) е базирана на изрази репликация и репликация, базирана на редове. По-рано за всички версии на mysqld, репликацията, базирана на изрази, е методът по подразбиране за изключване. Повечето машини за съхранение поддържат и трите подхода за регистриране на данни.

MySQL Master-Master репликацията увеличава мащаба на системата и подобрява производителността, като намалява режийните разходи за архивиране и осигурява излишък за активното приложение. Ако не разбирате какво е това, това е точно като два MySQL сървъра, които се актуализират взаимно. При репликация два отделни MySQL сървъра действат като клъстер. Клъстерирането на бази данни е подходящо главно за конфигурации на приложения с висока достъпност

Репликацията главен/главен се постига чрез настройка на ServerA да бъде подчинен на ServerB и настройка на ServerB да бъде подчинен на ServerA.

Предположение: Тази статия не предоставя стъпките за инсталиране на MySQL сървър, предполагам, че Mysql сървър (единичен екземпляр) е инсталиран и на двата сървъра:

За да конфигурираме MySQL master за овладяване на репликация на Linux сървъри, имаме нужда от два сървъра, информацията е следната:

сървър А :192.168.1.2

сървър Б: 192.168.1.3

ОС: RHL 6.4 x86_64

MySQL сървър: 5.6.17 x86_64

Предварителни проверки:

Деактивирайте защитната стена и на двата сървъра:

service iptables stop
chkconfig iptables off
service iptables status

И двата сървъра трябва да са достъпни един за друг, за да се провери пинг за достъпност на всеки сървър.

Коментирайте атрибута bind-address или го задайте на (bind-address=0.0.0.0) във файла my.sandbox.cnf или my.cnf и на двата сървъра. Споменах my.sandbox.cnf, това за в случай, че използвате MySQL::Sandbox

Първо ще активираме репликация от сървър B към A

СТЪПКА 1:
НА сървър A:192.168.1.2

редактирайте my.sandbox.cnf или my.cnf и добавете по-долу стойности server-id трябва да бъде> 0; в случай, че не знаете местоположението на файла my.cnf, използвайте тази команда на OS shell „mysql –help | grep my.cnf”, обикновено my.cnf е в директория /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

НА сървър B:192.168.1.3

редактирайте my.sandbox.cnf или my.cnf и добавете по-долу стойности server-id трябва да бъде> 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

СТЪПКА 2:
НА сървър 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;
На сървър 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;
СТЪПКА 3:
НА СЪРВЪР 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 | |             | |
+------------------+----------+--------------+------------------+-------------------+

НА СЪРВЪР 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; 

Сега ще си мислите откъде избирам стойностите за тези атрибути, не се притеснявайте, обяснявам го, изберете стойността MASTER_PORT  от горната заявка (ПОКАЖЕТЕ ГЛОБАЛНИ ПРОМЕНИ КАТО 'PORT') в този случай нашият порт е 5617 , Изберете стойността MASTER_LOG_FILE от колона File в горната заявка („show master status;“), която е  Mysql-bin.000002), Изберете стойността MASTER_LOG_POS от позицията на колоната в горната заявка, която е 423)

СТЪПКА 4:

Сега можете да стартирате подчинения

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

СЕГА репликацията от Б към А е активирана

СТЪПКА 5 

В тази стъпка ще тестваме репликацията от сървър B към A:

В ГЛАВНИЯ (сървър 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);
НА ДОБРЕНО:192.168.1.2 (сървър A)
show schemas;
use reptest;
select * from reptest.simples;

Сега ще активираме репликация от сървър A към B

СТЪПКА 6:
НА СЪРВЪР 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)

НА СЪРВЪР 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; 

Изберете стойността MASTER_PORT  от горната заявка (SHOW GLOBAL VARIABLES LIKE 'PORT') в този случай нашият порт е 5617, Изберете стойността MASTER_LOG_FILE от колона File в горната заявка („show master status;“), което е  Mysql-bin. .000004), Изберете стойността MASTER_LOG_POS от позицията на колоната в горната заявка, която е 120)

Сега можете да стартирате подчинения

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

СТЪПКА 7

Добре, така че нашата среда е настроена, сега ще тестваме дали нашата среда работи или не.

ВКЛЮЧЕНО 192.168.1.2 (сървър A)
insert into reptest.simples values (777),(41),(15),(61);

Тук не сме създали таблицата проста в DB name reptest, тъй като тя вече е била репликирана на сървър A при създаването на DB reptest и таблицата на сървър B.

ВКЛЮЧЕНО 192.168.1.3  (сървър B)
use reptest;
select * from reptest.simples;

Ура!! можете да видите, че всичко е настроено и нашата репликация от главен към главен е зададена.

ПРЕДУПРЕЖДЕНИЕ: Не е разумно приложението ви да изпълнява DML на двата сървъра едновременно. Записването на двата сървъра едновременно прави сравнително дълготрайно бързо преминаване при отказ за висока наличност, но няма повишаване на производителността. И двата сървъра трябва да изпълняват всички DML, независимо дали DML идват директно от клиенти или идват чрез репликация


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате и конфигурирате phpMyAdmin на Debian 8

  2. Преобразувайте JS date time в MySQL datetime

  3. Как да промените стойността на автоматично увеличение на MySQL / MariaDB база данни

  4. Показване (списък) MySQL бази данни на Linux чрез командния ред

  5. Максимална дължина на MySQL и GROUP_CONCAT().