Este tutorial tem como objetivo explicar como fazer a sincronização unilateral entre bancos de dados
MySQL utilizando a versão livre do
SQLyog Job Agent (SJA) para
Linux. Existe também o SJA para Windows, que está no diretório de instalação do SQLyog MySQL GUI, em sua versão Trial.
Convém lembrar que o SJA em si é livre para uso pessoal e comercial, porém o SQLyog, que é basicamente uma interface para o SJA com algumas funcionalidades a mais, possui sua versão livre (Community), e a paga (Ultimate, Enterprise, Professional). Poderíamos utilizar a Community, mas infelizmente ela não oferece a opção de sincronização de banco de dados. O SJA utiliza uma API para MySQL feita em C para conectar nos bancos de dados.
O próprio MySQL oferece opções de sincronização de banco de dados, porém o que acontece na realidade é que muitas vezes não temos acesso ao servidor para alterar seus arquivos de configuração à vontade.
Poderíamos também criar um pequeno script que faz um SELECT de todos os dados do servidor e depois inseri-los no banco de dados cliente, porém isso pode levar muito tempo à medida que mais informações vão sendo armazenadas no banco de dados.
Para solucionar esse problema de maneira fácil, rápida e segura podemos utilizar o SQLyog Job Agent (SJA).
O SJA é uma aplicação multithread de alta performance projetada para executar sincronização entre bancos de dados MySQL. Seus comandos ficam todos em um arquivo XML, sendo assim basta executar o SJA passando o caminho do XML como parâmetro, assim ele lê o arquivo e já cuida de tudo.
O SJA usa um algoritmo que gera os checksums para identificar as mudanças feitas no banco de dados, portanto somente as linhas que foram modificadas ou inseridas, são transferidas entre os hosts, sendo que as deleções também são identificadas e replicadas.
É importante ressaltar que o SJA trabalha melhor com versões de MySQL iguais, pois a função que gera os checksums podem sofrer alguma variação entre as versões.
Diferença entre a replicação incluída no MySQL e a sincronização usando o SJA
Porque utilizar o SJA sendo que o MySQL já nos oferece tal função de sincronização? Bem, poderíamos configurar o cliente e o servidor MySQL de maneira a manter uma sincronização utilizando o esquema de mestre/escravo. O "escravo" lê o log binário do "mestre" e assim poderá replicar todas as operações que o "mestre" executou. Porém muitas vezes não temos acesso suficiente ao servidor para alterar sua configuração conforme nossa necessidade.
O SJA simplesmente utiliza alguns algoritmos de checksum e realiza os INSERTS, UPDATES, ou DELETES de acordo com as mudanças ocorridas no "mestre". Apesar da possibilidade de ser mais lento que a replicação do MySQL (não testei para saber), o SJA somente necessita de algumas configurações em um arquivo XML e os privilégios de inserir, excluir, alterar e consultar no banco de dados do servidor, facilitando assim o processo de configuração.