Replicação com o MySQL


Autor/fonte: damxrn
E-mail/Url: http://www.phpbrasil.com/articles/article.php/id/1213
Tags: [ replicação ] [ mysql ]



Digg del.icio.us

Explicarei o que é replicação (replication) no MySQL, porque esse é um feature muito importante para desenvolvedores, e como configurar os servidores MySQL para ativar esse feature.

Ainda lembro daquela exaustante e fatídica sema de novembro de 2005.

Às 17:00 horas da sexta feira daquela semana tinha acabado de rechear o banco de dados de nossa aplicação com centenas de cadastro de processos, horas em frente ao uma tela de formulário que ao lembrar enjoa-me.

17:30 daquele dia, a senção do trabalho cumprido nos tomava, nos ivandia, literalmente, quando um fato inesperado aconteceu. Um dia (quinta-feira) antes de todo esse fadoso trabalho uma equipe do nosso setor de trabalho foi informada que o pessoal que cuida da limpeza de dados nos micros (a qual denominamos Turma do DEL), ia entrar nas maquinas via VNC para executar tarefas de rotina, tudo estaria bem, tudo estaria maravilhoso, se não fosse um, como poderia dizer; ENORME descuido.

O fulano que ficou responsável de nos passar a informação dessa trágica visita da Turma do DEL, esqueceu de nos passa-la, então nobre colegas também tínhamos esquecido de avisa-los que havíamos instalado essa nova aplicação de gerenciamento do arquivo, como eles (aturma do DEL) não sabiam mandaram pro espaço um mote de mega bytes e, infelizmente junto com eles a nossa aplicação e sua maravilhosa base de dados.

Gritei, chorei quando chego pela manhã da segunda e vejo tudo perdido. Mas, temos que aproveitar uma parte positiva de tudo que nos acontece então, desse horrível acontecimento até hoje, não abro mão de uma boa ferramenta de beckup para os meus dados e, a REPLICAÇÃO COM MYSQL é sem sombra de duvida uma dessas ferramentas.

Requisitos

Para criarmos um ambiente de replicação, precisamos de:

  1. Um servidor MySQL, que passarei a chamar aqui de "mestre";
  2. Uma segunda máquina, que receberá a cópia dos dados do mestre, que chamarei a partir de agora de "escravo". Esta segunda máquina deve possuir também uma cópia instalada do MySQL. Geralmente é usada a estação de trabalho do próprio DBA, no caso da ausência de um segundo servidor;
  3. Um descarregamento (dump) do banco de dados na qual desejamos fazer cópia de segurança;
  4. Acesso aos arquivos de configuração da base de dados, no Windows my.ini (geralmente fica no diretório da instalação do MySQL) e no Linux, dentro do diretório /etc;
  5. Poder de criação de contas e delegação de privilégios a essas novas contas. Qualquer que seja o seu ambiente, eu recomendo que as duas máquinas tenham um IP fixo na rede, já que a cópia será feita através da rede. É importante que ambos os MySQLs também sejam da mesma versão. A versão que usei para elaborar este artigo foi a 4.1.15.


Iremos discutir em seguida como configurar a máquina mestre para a replicação...

Preparando a máquina mestre

Inicialmente, prepararemos a máquina mestre. O primeiro passo é fazer um dump da(s) base(s) de dados que queremos replicar. Isso serve para criarmos uma cópia exata do nosso banco de dados para colocarmos no servidor escravo. Esse passo é muito importante! Para fazer um dump de uma base de dados, use o seguinte comando:

mysqldump --database <NOME DA BASE DE DADOS> -u<USUARIO> -p > c:meu_db.sql

Ou para fazer dump de todas as suas bases:

mysqldump --all-databases -u<USUARIO> -p > meu_mysql.sql

O sistema irá gerar um arquivo texto, que pode ser bastante grande, dependendo apenas do tamanho de sua base de dados. Se sua(s) base(s) forem grandes, recomendo fazer um dump para cada uma em vez de um grande arquivo contendo todas elas. Dentro desse arquivo texto existem as instruções, em linguagem SQL, para criar e popular sua base de dados em outra máquina.

Recomendo realizar o processo de dump acima ao invés de outras formas de cópia de dados, como copiar os arquivos do diretório ‘data’ diretamente através da rede, pois você poderá ter problemas caso use tabelas do tipo InnoDB.

Já com o arquivo SQL do dump da máquina mestre em mãos, vamos precisar criar o usuário que fará a replicação entre as duas máquinas. Para isso, entramos no MySQL com uma conta que permita a criação de privilégios. A conta do root do MySQL é uma excelente pedida.

mysql> GRANT FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD
       ON *.* TO 'replica'@'%' IDENTIFIED BY 'senhareplica';

No exemplo acima, usei como usuário de replicação a conta ‘replica’, e como senha a palavra ‘senhareplica’. Modifique esses parâmetros a seu gosto. Uma observação sobre a linha acima é que ela permite que o suário replica copie os dados de qualquer máquina da rede. Caso preferira restringir isso, utilize apenas o IP da máquina escravo ao invés do símbolo de ‘%’, usado no exemplo. Um outro detalhe que vale a pena ser observado é que o comprimento máximo da senha é de 16 caracteres.

Configuraremos agora o arquivo de inicialização do MySQL do servidor mestre. Abra o arquivo my.ini (Windows) ou my.cnf (Linux) e localize a seção [mysqld]. No arquivo do Linux, já existem informações prontas para uso, enquanto que o arquivo do Windows é mais enxuto. O importante é acrescentar no final da seção [mysqld] as seguintes linhas:

log-bin
server-id = 1

Salve o arquivo e reinicie o servidor mestre. As linhas servem para iniciar o log binário do MySQL. O parâmetro server-id designa um número único para o seu servidor. Este número não deve se repetir.Uma vez reiniciado, faça login e digite no servidor mestre:

mysql> RESET MASTER;

Este comando serve para reiniciar os logs binários já existentes.

Iremos discutir em seguida como configurar a máquina escravo para a replicação...

Preparando a máquina escravo

Agora iremos preparar a máquina escravo. Antes de qualquer passo, devemos restabelecer as bases de dados do servidor mestre na máquina escravo, através do dump que fizemos no primeiro passo. Para isso, usamos o seguinte comando:

mysql -u <USUÁRIO> -p < c:meu_arquivo.sql

Substitua o nome do arquivo pelo que você criou na etapa de preparação da máquina mestre. Agora vamos alterar o arquivo my.cnf ou my.ini. Novamente, localizamos a seção [mysqld] dentro do arquivo. Porém os parâmetros agora são diferentes.

server-id = 2
master-host = Endereço IP do servidor MESTRE
master-user = replica
master-password = senhareplica
replicate-do-db = minha_database1

Chamo a atenção para a linha server-id=. Repare que no escravo usei o número, enquanto no mestre usei o número 1. Se tivéssemos uma terceira máquina replicando dados, ela deveria ser configurada com server-id=3. Estes números não devem se repetir, e são usados para o MySQL se orientar entre as replicações.

Os parâmetros master-user e master-password são os mesmos das configurações feitas no mestre. Ou seja, no meu caso, replica e senhareplica. O último parâmetro é o comando replicatedo-db. Esse parâmetro especifica qual a base de dados que queremos replicar. Se tivéssemos mais bases de dados sendo replicadas, devemos incluí-las da seguinte forma:

server-id = 2
master-host = Endereço IP do servidor MESTRE
master-user = replica
master-password = senhareplica
replicate-do-db = minha_database1
replicate-do-db = minha_database2
replicate-do-db = minha_database3

Caso queira replicar todas as bases do servidor e não apenas algumas, basta não especificar a linha replicate-do-db, e o MySQL entenderá que todas as bases devem ser replicadas. Após esse passo, entre no prompt do MySQL da máquina escravo e digite:

mysql> RESET SLAVE;

Esse comando serve para deletar os logs binários já existentes, para evitar inconsistência com os logs binários já existentes no escravo. Com isso, nossa configuração de replicação está encerrada. Não devemos nos esquecer de reiniciar o serviço do MySQL no escravo. Assim que for reiniciado, ele tentará se conectar ao mestre, conforme especifi-cado no arquivo my.cnf ou my.ini. Para verificar se está tudo bem no seu escravo, e se os dados estão realmente sendo replicados, basta usar o comando:

mysql> SHOW SLAVE STATUS;

Repare que na saída do comando será mostrado uma coluna chamada “Slave Running”, cujo conteúdo deve ser “yes”. Caso haja algum problema, verifique as permissões da conta replica. Ela é geralmente culpada pela maioria dos problemas de replicação. Outra fonte de informação interessante é o log de erro do MySQL, localizado no Linux geralmente no diretório /var/lib/mysql, e no Windows no diretório onde ele foi instalado.

Caso tenha configurado um endereço IP incorretamente, o escravo obviamente não conseguirá se conectar ao mestre. Para consertar o problema, reconfigure o arquivo my.cnf ou my.ini com o IP correto, e reinicie o escravo.




Enviado por xKuRt em 05/08/2007 às 16:16


Itens relacionados

MARIA, o novo Storage Engine do MySQL
Formatando saída de dados direto na query do MySQL
Alterar diretório base de dados do MySQL
Nova certificação MySQL
Algumas funções úteis do MySQL
Gerando uma consulta randômica no MySQL
Instalando um servidor MySQL para uso geral
Utilização de datas no MySQL
Tutorial MySQL: Algumas funções úteis
Autenticação no Apache com MySQL

Listar todos itens relacionados

Avaliação

Avaliação desta publicação: 10.00; Total de avaliações: 1


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por duduccost em 03/09/2008 às 14:12

nossa kra quero dizer muito obrigado esse artigo me ajudou muito....agradecido DEUS TE ABENCOE

--
Dudu Costa


Envio de comentário:




  

Sexta, 31 de Outubro de 2014




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Como Detectar Invasão em Rede: Um Guia para Analistas


Capa do livro
BI - Businnes Intelligence no Excel


Capa do livro
Autodesk Revit Architecture 2013: Conceitos e Aplicações





Hostnet

IMD