Sincronização segura entre bancos de dados MySQL utilizando SJA

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.

[ Hits: 47.573 ]

Por: Henrique Ribeiro Rezende em 19/07/2010


Introdução



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.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Tunelamento SSH (opcional)
   3. Sincronização utilizando SJA
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Gambas2 e MySQL, aprofundando relações

Store Procedures com Transaction no MySQL

Instalando o phpmyAdmin no Debian Etch

Introdução ao MySQL

OcoMon 2.0RC6 no OpenSUSE 11.2 com PHP5 + MySQL5 + Apache2 com correção de acentuação

  
Comentários
[1] Comentário enviado por jhonatasbs em 26/08/2011 - 13:30h

Muito bom seu artigo porém estou com muito problema pra executa-lo, quando eu configuro o xml para conexão, ele conecta certinho, porém da erro com o socket do meu mysql, tem como eu inserir a localidade do socket no XML do sja?

[2] Comentário enviado por joaoportal em 05/07/2012 - 16:54h

Olá. Funcionou perfeitamente no meu, até criei um arquivo (conectar.sh) para executar tudo de uma vez. Porém quando jogo para ser executado no crontab ele não funciona a linha: ssh -f -L 3307 ...
Todo o resto funciona mesnos essa linha.

Segue o conecta.sh
----------------------------------------------------------------------------------------
#!/bin/bash
echo iniciando!! >> /home/teste/mysql/teste.txt

#contecta no servidor - APENAS O COMANDO ABAIXO NÃO EXECUTA
ssh -f -L 3307:127.0.0.1:3306 [email protected] sleep 240 >> /home/teste/mysql/logfile
#backups
/home/teste/mysql/sja /home/teste/mysql/festas.xml
echo 'fim!!' >> /home/teste/mysql/teste.txt
----------------------------------------------------------------------------------------

Aguardo

[3] Comentário enviado por phenrique0206 em 16/09/2013 - 15:16h

Pra mim deu a seguinte mensagem de erro:

SQLyog Job Agent v11.24 (64 bit) Copyright(c) Webyog Inc. All Rights Reserved.

Error in the job file. Error No. 9 : Error reading end tag.

Check sja.log for complete error details.


O que pode ser isso?



Contribuir com comentário