Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Replicação de dados com recurso multi-source MySQL (5.6 / 5.7)

Gostaria de saber se alguém tem um tutorial sobre como fazer replicação de dados no MySQL numa arquitetura de vários mestres e 1 escravo. Achei na internet um artigo sobre isso no site abaixo, mas não funcionou. Meu objetivo é fazer com que os dados nos mestres sejam replicados para uma mesma tabela em um escravo na rede.

http://pt.blog.marceloaltmann.com/multi-source-replication-with-mysql-5-7-example/

3 respostas

Fala ai Lucas, tudo bem ?

Cara ainda não encontrei nenhum bom para isso, os que vi estavam bem confusos :(

Também não achei nenhum que funcione. Se eu descobrir algo vou postar aqui.

solução!

Depois de testar muitas sugestões, consegui montar uma solução. Essa configuração serve para replicar informações de databases masters em vários computadores para um servidor slave. Nesse exemplo temos: - No master 1 um database com nome "replicacao" e uma tabela "tabela_master1"; - No master 2 um database com nome "replicacao" e uma tabela "tabela_master2"; - No servidor slave um database com nome "replicacao" e as tabelas "tabela_master1" que trará informações do master1 e outra tabela "tabela_master2"

Configuração deve começar pelos masters. Em cada MASTER, faça:

  1. Altere o arquivo "C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" com as seguintes informações na última linha:
# Server Id. Cada servidor deve ter um único id.
server-id=30

# Binary Logging-Localização do arquivo de log binário
log-bin="C:/ProgramData/MySQL/MySQL Server 5.7/Data/bin-log"

# Databases que serão replicadas. Para múltiplos database, adicione mais linhas.
binlog-do-db=replicacao

# bin_address - acesso externo. Endereço 0.0.0.0 indica que qualquer computador terá acesso.
bind-address=0.0.0.0

# GTID para masters - essas são as configurações GTID necessárias para multi-source funcionar.
gtid-mode=on
enforce-gtid-consistency=on
master-info-repository=TABLE
relay-log-info-repository=TABLE>

Importante: procure no arquivo linhas server-id, log-bin e demais alterações. É possível que elas já existam no arquivo. Nesse caso, coloque "#" na frente da linha existente para transformar em comentário ou apague-as.

  1. Crie um usuário com acesso SUPER: mysql>GRANT REPLICATION SLAVE ON . TO 'nome_usuario'@'%' IDENTIFIED BY 'senha_usuario';

  2. Reinicie o servidor MySQL (clique botão da direita do mouse sobre o icone na barra de tarefas e selecione "restart").

  3. Execute o comando no command line do MySQL - show master status \G; Esse comando traz as informações do master. Principal é observar os itens: File: nome do arquivo binário; Position: posição do último evento no arquivo. Importante para sincronismo entre as tabelas do master e slave; Binlog_Do_DB: database que será usado na replicação.

No SLAVE faça o seguinte:

  1. Altere o arquivo "C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" com as seguintes informações na última linha:
# Server Id.
server-id=50

# Binary Logging-Localização do arquivo de log binário
log-bin="C:/ProgramData/MySQL/MySQL Server 5.7/Data/bin-log"

# Databases que serão replicadas
binlog-do-db=replicacao

# bin_address - acesso externo
bind-address=0.0.0.0

#multi-source replication
master-info-repository=TABLE
relay-log-info-repository=TABLE
gtid-mode=on
enforce-gtid-consistency=on
  1. Reinicie o servidor MySQL (clique botão da direita do mouse sobre o icone na barra de tarefas e selecione "restart").

  2. Na linha de comando do SQL, digite o seguinte:

mysql>STOP SLAVE;
mysql>FLUSH LOGS;
mysql>CREATE DATABASE 'replicacao';
mysql>USE replicacao;
mysql>CREATE TABLE 'tabela_master1' ('id' INT(11), NOT NULL AUTO_INCREMENT PRIMARY KEY, 'coluna1' VARCHAR(255) DEFAULT NULL);
mysql>CREATE TABLE 'tabela_master2' ('id' INT(11), NOT NULL AUTO_INCREMENT PRIMARY KEY, 'coluna1' VARCHAR(255) DEFAULT NULL);
mysql>CHANGE MASTER TO MASTER_HOST="IP_do_master1", MASTER_PORT=3306, MASTER_USER="nome_usuario_do_master1", 
MASTER_PASSWORD='senha_do_usuario_master1", MASTER_LOG_FILE='nome_do_aquivo_binario_do_master1_item_file', MASTER_LOG_POS=numero_posicao_master1 FOR 

CHANNEL 'master1';
mysql>CHANGE MASTER TO MASTER_HOST="IP_do_master2", MASTER_PORT=3306, MASTER_USER="nome_usuario_do_master2", 

MASTER_PASSWORD='senha_do_usuario_master2", MASTER_LOG_FILE='nome_do_aquivo_binario_do_master2_item_file', MASTER_LOG_POS=numero_posicao_master2 FOR 

CHANNEL 'master2';
mysql>START SLAVE;
mysql> SHOW SLAVE STATUS \G;

Nesse ponto, as informações importante que deverão ser notadas são:

           Slave_IO_State: Waiting for master to send event
                  Master_Host: ip_do_master1
                  Master_User: replicador
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: bin-log.000002
          Read_Master_Log_Pos: 1306
               Relay_Log_File: wserver2016-relay-bin-master2.000003
                Relay_Log_Pos: 934
        Relay_Master_Log_File: bin-log.000002
             Slave_IO_Running: Yes (indica que está rodando)
            Slave_SQL_Running: Yes (indica que está rodando)
           Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Agora insira dados nas tabelas master 1 e master 2 e faça um select na tabela slave para checar.