Replicando dados com Mysql 5 – Parte I
Neste artigo, vamos entrar criar um ambiente de replicação entre duas instâncias de Mysql. Vai ser um pouco longo, então irei quebrá-lo em duas partes. Vamos à primeira!
Uma das alternativas mais simples de proporcionar mais disponibilidade e segurança a um sistema baseado em Mysql é a replicação. No futuro apresentarei outras soluções, como por exemplo o Cluster Mysql. Veja uma tabela resumo das possibilidades, vantagens e desvantages principais de cada um aqui.
A replicação é um processo assíncrono, ou seja, o slave não precisa estar conectado o tempo todo para ocorrer,e não impede as atividades normais do master mesmo que o link entre ambos seja lento. A replicação permite copiar dados de databases ou mesmo somente de tabelas específicas, através do compartilhamento do log binário aos Slaves (que guarda as modificações feitas nos bancos de dados configurados do servidor Master).
Pode ser usado para aumentar a performance (balanceamento de carga entre os nós), melhor a integridade e performance do backup (fazendo backup somente do replicante e não do master), com o objetivo de análise de dados (rodando queries pesadas, como BI, no slave ao invés do Master, mantendo a performance da aplicação), ou para distribuição de dados entre filiais distantes geograficamente.
Satisfeitos? Então, mãos à obra. Pré-requisitos:
- Mysql 5.0.21 ou superior;
- Correta configuração do my.cnf nos Slaves e no Master (veremos mais adiante).
Ambiente usado para o artigo:
- Red Hat 4.6 x86-64;
- MySQL Community Edition 5.0.45;
- 2 x Servers de BD com 4 GB de RAM e 1 x Server aplicação com 2 GB de RAM (Apache, aplicação em PHP).
CONFIGURANDO O MASTER
1-) Prepare o servidor Mysql que será o MASTER. A solução de replicação pode ser utilizada com os principais Storage Engines do Mysql5 (InnoDB, MyISAM); apesar disso, recomendados o InnoDB, pois o MyISAM usa bufferd I/O e em caso de crash, o log binário estará sem sincronismo; e, para casos realmente críticos, nunca deixem de checar o funcionamento das baterias para as memórias cache de suas controladoras SCSI locais. Os parâmetros a seguir são válidos para o InnoDB (que possui suporte transacional), e são adequados para um servidor com bom I/O e 4GB de RAM.
server-id = 1 # o master é sempre id 1
sync_binlog = 1 # configuracao mais segura procurando evitar inconsistencia entre o banco e o arquivo de log em caso de crash
replicate-do-db = nomebd1,nomebd2 # nome dos bancos de dados que serão usados na replicação
replicate-ignore-db = mysql,test # nome dos bancos de dados que serão ignorados na replicação
log_warnings # para ter um pouco mais de informação sobre o status da replicação. Posteriormente deixe-o habilitado somente nos slaves
log-bin=/var/lib/mysql/servidormaster-bin # caminho e padrão de nome do log binário do Servidor master
innodb_flush_log_at_trx_commi
log-bin=/var/lib/mysql/servidormaster-bin # caminho e padrão de nome do log binário do Servidor master
innodb_flush_log_at_trx_commit = 1 # indica que a cada transação concluída será comitada nos logs binários (sem buffer, maior segurança)
innodb_support_xa = 1 # garante mais sincronizações entre transações comitadas e o log binário (ocasiona alguma perda de performance. Para aplicações com mais de 200 transações por segundo, espere por diminuição por conta de latência de disco. Neste caso, aumente o valor para, digamos, 5 - este é o número de transações que você perderá em caso de crash)
innodb_file_per_table # necessário para maior integridade física e para maior velocidade em caso de recuperação
Lembrando que estes parâmetros devem ser gravados no my.cnf, mas alguns deles também podem ser mudados dinâmicamente com o comando SET GLOBAL.
Fonte: http://www.hitk.com.br
Nenhum Post Relacionado.
Artigos parecidos fornecidos por Yet Another Related Posts Plugin.



