MySQL Cluster (Master/Slave)

Um dos recursos mais interessantes presente no MySQL é a capacidade de replicação automatizada de bases de dados em servidores distintos de forma simples e rápida. Segue um breve tutorial para configuração de um servidor MySQL com replicação 1:1 (Master/Slave):

Primeiramente realize a instalação do MySQL em ambas as máquinas, lembrando que é altamente recomendável manter a mesma versão em todos os servidores participantes do cluster, e ative o acesso a conexões TCP (vem como padrão na maior parte das distribuições). Para prosseguir com o exemplo, consideraremos que o servidor master tem o IP 192.168.0.1 com hostname Naru e o slave tem o IP 192.168.0.2 com hostname Motoko.

Adicione os seguintes parâmetros na sessão [mysqld] do/etc/my.cnf no master:

log-bin=naru-bin
log-slave-updates
server-id=1

Agora, adicione os seguintes paramêtros no [mysqld] do /etc/my.cnf no slave:

relay-log=motoko-relay-bin
master-host=192.168.0.1
master-user=replication
master-password=mypassword
server-id=2

Inicie o serviço MySQL no servidor master e adicione um usuário com permissão de replication (em nosso caso o usuário é replication e a senha é mypassword), lembrando que esse usuário será utilizado para qualquer conexão entre os servidores :

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@192.168.0.2 \
IDENTIFIED BY ‘mypassword’;

Reinicie o serviço MySQL no servidor master para fixar as alterações.

Após realizar as configurações no servidor master, inicie o serviço MySQL no servidor slave e inicie o serviço de replicação com:

START SLAVE;

Para verificar o status da replicação, utilize a seguinte sintaxe no servidor slave:

SHOW SLAVE STATUS\G;

A linha related_log_files deve indicar o arquivo correspondente, e as linhas Slave_IO_Running e Slave_SQL_Running devem estar setadas para Yes. Desta forma a replicação está sendo feita normalmente.

Lembrando que as bases devem estar em sincronia para o correto funcionamento, desta forma, os dados do servidor slave não podem ser alterados diretamente. Caso tenha algum erro ao iniciar a replicação consulte o log default do MySQL, pois os dados obtidos são bem completos e de fácil entendimento.

Normalmente o principal problema que acontece em servidores que já estão sendo utilizados em produção é a falta de sincronia entre as bases, que pode ser resolvida fazendo um dump da base master e replicando para a slave sem que haja alteração dos dados durante o processo.

Caso seja necessário realizar a alteração do servidor master enquanto a máquina slave está em produção, pode-se utilizar as seguintes sintaxes:

SLAVE STOP;
CHANGE MASTER TO master_host=”<IP do servidor master>”, \ maste_log_pos=0;
SLAVE START;

* Tendo em vista que a nova máquina master já está configurada corretamente.

A replicação pode ser realizada de várias outras formas, de acordo com as necessidades de cada ambiente, porém este tutorial indica sua utilização mais simples, normalmente utilizado em sistemas de consulta onde a carga é muito alta e deve ser distribuída.

Share and Enjoy:
  • email
  • Facebook
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks
  • LinkedIn
  • Twitter
  • Digg
  • Slashdot
  • Technorati
  • Identi.ca
  • Live

12 Responses to “MySQL Cluster (Master/Slave)”

  1. Luiz says:

    Caso tenha alguma dúvida ou sugestão, pode postar aqui nos comentários…

  2. Luiz says:

    Post any doubts or suggestions in comments… Thanks!

  3. Luiz says:

    Olá Luciano!

    Bom, esse tipo de erro normalmente acontece quando o servidor não carregou as informações no my.cnf… Confirme se os dados estão sendo carregados após o reinício do servidor corretamente.

    Um erro bastante comum em algumas distribuições (principalmente Slackware!) é o MySQL não estar sendo iniciado com conexões TCP ativas, e somente por Unix socket… Desta forma não é possível a replicação, por se tratarem de servidores distintos, e para corrigir apenas ative as conexões TCP (provavelmente no script de inicialização) e reinicie o serviço.

    Verifique estas informações e qualquer erro pode mandar!

  4. bento says:

    poderia explicar como poso configurar o cluster mysql, para duas maquinas, estou a fazer um projecto e ñ estou a conseguir, fazer

  5. Luiz says:

    Olá bento! O procedimento acima funciona para cluster de 2 máquinas ou mais.
    Pode me passar onde você está tendo problemas? Assim posso lhe dar explicações mais completas e auxíliá-lo diretamente em suas dúvidas.

  6. Lancecom says:

    Ola
    Caro Luiz talvez vc possa me dar umas luz.
    Possuo um cliente/empresa com 2 lojas e a Matriz, o qual consegui implementar somente um servidor na Matriz que replica os dados de um filial, multi-master bidirecional, gostaria de inserir a outra filial no My.ini e replicar no mesmo diretorio. É possivél tal operação??

  7. Luiz says:

    @Lancecom: Olá! Para configurar os 3 servidores, esta mesma configuração master-master não será possível devido a falta de sincronia entre os updates e inserts nas bases.

    Acredito mais recomendado em seu caso é utilizar o MySQL com a engine ndb (http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-overview.html) mantendo a sincronia entre todas as bases e garantindo a consistência dos dados.

  8. bento says:

    dizes, depois de configurar, para reiniciar o servidor master, mas ñ explicas coo posso faço para reiniciar.. tenho assim tantas duvidas pq é a primeira vez tento implementar

  9. bento says:

    apos reiniciar o master me da esse erro” mysqladmin: Error starting slave: The server is not configured as slave; fix in config file or with CHANGE MASTER TO” podes m ajudar Luiz

  10. Luiz says:

    Bento, provavelmente a configuração do master tem algo a mais.
    Certifique que nas configurações do master tenha somente as entradas:
    log-bin=nome_do_server-bin
    server-id=1
    Confira também se a máquina slave tem o server-id=2 e se o IP da maquina master está setado corretamente.

    O comando “CHANGE MASTER TO” pode ser utilizado na slave para ativar a replicação com outro master diretamente através da shell do mysql com a seguinte sintaxe:

    CHANGE MASTER TO
    MASTER_HOST=’ip_do_servidor_master’,
    MASTER_USER=’usuario_da_replicacao’,
    MASTER_PASSWORD=’user_password’,
    MASTER_LOG_FILE=’nome_do_master-bin.001′;

  11. bento says:

    olá Luiz ja consegui resolver o problema com a replicação , sempre que alguem ñ conseguir fazer a replicação.. e bom não se esquecer de desligar as firewall.
    thanks Luis pela ajuda

  12. bento says:

    após ter configurado o master
    log-bin=pc1-bin
    log-slave-updates
    server-id=1
    e o slave
    relay-log=pc2-relay-bin
    master-host=192.168.0.2
    master-user=repl
    master-password=243exp
    server-id=2
    sendo que pc2 é o slave e o pc1 master.. no ficheiro log mysqld.log aparece assim “[Warning] Neither –relay-log nor –relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use ‘–relay-log=/var/run/mysqld/mysqld-relay-bin’ to avoid this problem” porque sera podes m ajudar..

Leave a Reply