Replicação de dados no MySQL

O objetivo de um mecanismo de replicação de dados é permitir a manutenção de várias cópias idênticas de um mesmo dado em vários servidores de banco de dados (SGBD). Os principais benefícios da replicação de dados é a redundância, o que torna o sistema menos sensível às falhas, a possibilidade de um balanceamento de carga do sistema, já que o acesso pode ser distribuído entre as réplicas, e finalmente, ter-se um backup on-line dos dados, já que todos as replicas estariam sincronizadas. Este artigo, apresenta uma introdução ao mecanismo de replicação do MySQL, bem como as configurações básicas do SGBD para a realização desta tarefa.

O MySQL permite um tipo de replicação conhecido como Master-Slave, neste caso temos um servidor MySQL atuando como Master e um ou mais servidores MySQL atuando como Slaves. O servidor Master grava em um log binário de alterações todos os comandos de atualização da base de dados. Os slaves por sua vez se conectam ao master, lêem o arquivo de log binário e executam os comandos encontrados neste log. Desta forma, todas as alterações ocorridas no master são imediatamente replicadas para os outros servidores slave.

A replicação Master-Slave é um processo assíncrono, isto é, poderá existir um atraso de informações entre o master e os slaves dependendo do meio de comunicação entre eles. Além disto, como os slaves copiam as alterações do master, todas as modificações dos dados devem ser aplicadas ao master, caso contrário os servidores ficarão sem sincronismo. Este processo incremental com a execução de todas as alterações indicadas no log binário a partir de um determinado momento, não garante que os dados existentes antes do início da replicação eram idênticos. Neste caso, antes de iniciar a replicação é preciso sincronizar todos os servidores, colocando em todos eles uma cópia da base de dados a ser replicada.

Para configurar a replicação cada servidor MySQL deverá possuir um server-id único e o master deve estar com o log binário habilitado. Além disto, crie um usuário no master com o privilégio FILE (3.23.x) ou REPLICATION SLAVE (4.x ou superior), para que os slaves possam se conectar a este servidor e fazer a leitura do seu log binário. Nos slaves é preciso indicar o endereço do servidos master e o usuário que será utilizado para fazer a conexão. A seguir esta um exemplo de configuração do master e slave:

Master my.cnf                                           Slave my.cnf

[mysqld]                                                  [mysqld]
...                                                           ...
server-id=1                                              server-id=2
                                                             # IP ou DNS da máquina master
log-bin                                                    master-host=master.com.br
...                                                          master-user=user_replication
                                                             master-password=senha_usuario
                                                             master-port=3306

Uma vez configurado os servidores, coloque a imagem dos dados a serem replicados em cada um dos servidores e reinicie o MySQL em todos os hosts. Depois disto a replicação estará funcionando. Para verificar o sucesso da configuração execute os comandos SHOW MASTER STATUS e SHOW SLAVE STATUS, respectivamente nos servidores master e slaves.

No próximo artigo serão abordados os recursos e topologias avançadas para a replicação de dados do MySQL.

Abraços e até breve!

Eber M. Duarte