Salve galera!

Apesar de fugir um pouco do tópico de nosso site, gostaria de escrever um artigo bem resumido sobre como criar um servidor mirror MySQL.
Criando um servidor mirror, permite que você mantenha um site de contingência e evite muitos problemas.

Atenção: Servidores de mirror não substituem backup! Tenha sempre uma cópia de backup das informações.

Bem, vamos começar a preparar o ambiente.

Meu ambiente:

Servidor produtivo:
– Mysql Server 5
– CentOS ( na verdade o sistema operacional não vai importar hehehe )
– Base produtiva de um servidor de monitoramento ( zabbix )
– IP 10.100.1.191

Servidor espelho:
– Mysql Server5
– CentOS minimal.
– IP 10.100.1.104

Explicação superficial

Em nosso servidor de mirror, vamos utilizar as alterações efetuadas no servidor master (produção). Estas atualizações são definidas como log-bin, ou seja, logs de alteração.
Estes logs normalmente ficam em /var/lib/mysql e contém (exatamente) os comandos SQL executados no server.

Para visualizar um arquivo de bin no linux, faça:

# strings /var/lib/mysql/mysql-bin.000001 | more

Para maiores detalhes sobre a definição dos log-bins, acesse http://dev.mysql.com/doc/refman/5.1/en/binary-log.html

Preparando servidor produtivo

A preparação do servidor produtivo requer alguns cuidados. Na verdade a parte de configuração é muito simples exigindo poucas linhas.
Primeiro verifique se o servidor mysql está devidamente em execução e se aceita conexões externas:


 
Adicionamos mais um ip no bind-address que é referenciado em nossa eth0. Assim qualquer host da rede 10.100.1.X poderá acessar nosso servidor. ( em nosso exemplo não precisamos de muita segurança, mas se quiser mais segurança utilize tcpwrapper, iptables ou mesmo controle do mysql ).
Observe na imagem que adicionamos a linha server-id=1 e log-bin=mysql-bin no nosso servidor produtivo. A linha do server-id informa apenas um identificador para nosso banco e a linha log-bin informa que o sistema fará log das atividades ( usadas para nossa replicação ). Ambas são obrigatórias para a conexão entre o slave e o master.

Preparando servidor espelho

Nada diferente de nosso servidor produtivo, porém aqui definimos outro server-id ( server-id=2 ).

Preparando ambiente do banco

Uma vez com os servidores devidamente configurados ( sim, só isso 🙂 ), vamos preparar o ambiente de replicação.
Para fazer nosso mirror vamos precisar de um usuário dedicado a tarefa e com a permissão de REPLICATION, neste artigo inusitadamente chamado de replicador

Vamos criar o usuário na base produtiva ( obs: não precisa criar na base de espelho ).

# mysql -u root -p
mysql> CREATE USER 'replicador'@'%' IDENTIFIED BY 'souUmaSenhaSuperSegura';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicador';
Criado nosso usuário e atribuido a permissão de replicação, vamos exportar a base para um arquivo.
Antes de exportar, vamos travar as tabelas e após a exportação as liberaremos.
# mysql -u root -p
mysql> FLUSH TABLES WITH READ LOCK;

# mysqldump -u root -p --all-databases --lock-all-tables >dump_para_mirror.db
# fg
mysql> UNLOCK TABLES;

Com a sequência anterior, travamos as tabelas para que não haja atualização, deixamos a conexão ativa ( usando CTRL+Z ) e exportamos o dump.
Para que a base não ficasse travada, voltamos ao processo do mysql usando fg e desativamos a trava de tabelas.

Subindo a base mirror

Primeiro copie o nosso dump para o servidor de mirror. No meu caso ele é pequeno em bases muito utilizadas pode ter alguns GBs ou TBs 🙂

Após copiar, suba o dump utilizando o comando:

mysql -u root -p < nome_do_arquivo.exportado

Uma vez com o dump carregado na máquina slave, informe o master, o usuário e a senha do replicador.

mysql> CHANGE MASTER TO MASTER_HOST='10.100.1.191', MASTER_USER='replicador', MASTER_PASSWORD='souUmaSenhaSuperSegura';

Pronto! Agora você tem uma base mysql replicada 😉