Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Replicação de mestre para mestre do MySQL


A replicação é usada para manter dois ou mais bancos de dados sincronizados, replicando DML/instrução executada ou alterações no conjunto de dados de um servidor mestre para um ou vários servidores escravos.

Há três métodos de registrar os dados para replicação:A replicação baseada em instrução (SBR) replica as instruções SQL que modificam os dados. A replicação baseada em linha (RBR) replica apenas as linhas alteradas. A replicação com base mista (MBR) é a replicação baseada em instrução e a replicação baseada em linha. Anteriormente para todas as versões do mysqld, a replicação baseada em instruções é o método padrão de offlogging. Quase todos os mecanismos de armazenamento suportam todas as três abordagens para registrar dados.

A replicação MySQL Master-Master aumenta o sistema e melhora o desempenho reduzindo a sobrecarga do backup e fornecendo redundância para o aplicativo ativo. Se você não está entendendo o que é, é como dois servidores MySQL se mantendo atualizados. Com a replicação, dois servidores MySQL separados atuam como um cluster. O clustering de banco de dados é adequado principalmente para configurações de aplicativos de alta disponibilidade

A replicação mestre/mestre é obtida configurando o ServidorA como escravo do ServidorB e configurando o ServidorB como escravo do ServidorA.



Suposição: Este artigo não fornece as etapas para instalação do servidor MySQL, estou assumindo que o servidor MySQL (instância única) foi instalado em ambos os servidores:

Para configurar um mestre MySQL para replicação mestre em servidores Linux, precisamos de dois servidores, as informações são as seguintes:

servidor A :192.168.1.2

servidor B: 192.168.1.3

SO: RHL 6.4 x86_64

Servidor MySQL: 5.6.17 x86_64

Pré-verificações:

Desabilite o firewall em ambos os servidores:

service iptables stop
chkconfig iptables off
service iptables status

Ambos os servidores devem estar acessíveis um ao outro, a fim de verificar o ping de acessibilidade de cada servidor.

Comente o atributo bind-address ou defina-o como (bind-address=0.0.0.0) no arquivo my.sandbox.cnf ou my.cnf em ambos os servidores. Mencionei my.sandbox.cnf, caso você esteja usando MySQL::Sandbox

Primeiro, habilitaremos a replicação do servidor B para A

ETAPA 1:
ON servidor A:192.168.1.2

edite my.sandbox.cnf ou my.cnf e adicione abaixo os valores server-id devem ser> 0; caso você não saiba a localização do arquivo my.cnf use este comando no shell do sistema operacional “mysql –help | grep my.cnf”, geralmente my.cnf está no diretório /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


ON servidor B:192.168.1.3

edite my.sandbox.cnf ou my.cnf e adicione abaixo os valores server-id devem ser> 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


ETAPA 2:
ON servidor 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;
No servidor 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;
ETAPA 3:
NO SERVIDOR 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 | |             | |
+------------------+----------+--------------+------------------+-------------------+

NO SERVIDOR 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; 

Agora você estará pensando de onde estou escolhendo os valores para esses atributos, não se preocupe, estou explicando, escolha o valor MASTER_PORT  da consulta acima (SHOW GLOBAL VARIABLES LIKE 'PORT') neste caso, nossa porta é 5617 , Escolha o valor MASTER_LOG_FILE da coluna File na consulta acima (“show master status;”) que é Mysql-bin.000002), selecione o valor MASTER_LOG_POS da posição da coluna na consulta acima que é 423)
ETAPA 4:

Agora você pode iniciar o escravo
mysql>start salve:
mysql> show slave status \G;

AGORA a replicação de B para A foi habilitada
ETAPA 5 

Nesta etapa testaremos a replicação do servidor B para o A:
ON MASTER (servidor 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);
ON SLAVE:192.168.1.2 (servidor A)
show schemas;
use reptest;
select * from reptest.simples;


Agora vamos habilitar a replicação do servidor A para B

ETAPA 6:
NO SERVIDOR 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)


NO SERVIDOR 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; 

Escolha o valor MASTER_PORT  da consulta acima (SHOW GLOBAL VARIABLES LIKE 'PORT') neste caso, nossa porta é 5617, escolha o valor MASTER_LOG_FILE da coluna File na consulta acima (“show master status;”) que é  Mysql-bin .000004), escolha o valor MASTER_LOG_POS da posição da coluna na consulta acima que é 120)

Agora você pode iniciar o escravo
mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;


ETAPA 7

OK então nosso ambiente está configurado, agora vamos testar se nosso ambiente está funcionando ou não.
ON 192.168.1.2 (servidor A)
insert into reptest.simples values (777),(41),(15),(61);


Aqui não criamos a tabela simples no nome do banco de dados reptest pois já foi replicada para o servidor A quando foi criado o banco de dados reptest e a tabela no servidor B.
ON 192.168.1.3  (Servidor B)
use reptest;
select * from reptest.simples;



Viva!! você pode ver que tudo está definido e nossa replicação de mestre para mestre está definida.

AVISO: Não é inteligente ter seu aplicativo executando DML em ambos os servidores ao mesmo tempo. Gravar em ambos os servidores ao mesmo tempo faz um failover rápido razoavelmente durável para alta disponibilidade, mas não traz ganhos de desempenho. Ambos os servidores precisam executar todo o DML, seja o DML vindo diretamente dos clientes ou via replicação