Репликацията се използва за поддържане на синхронизиране на две или повече бази данни чрез репликиране на изпълнени промени в 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 идват директно от клиенти или идват чрез репликация