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: 49.978 ]

Por: Henrique Ribeiro Rezende em 19/07/2010


Sincronização utilizando SJA



Agora baixe o SJA para Linux no site: http://code.google.com/p/sqlyog/downloads/list

Descompacte o tar.gz em uma pasta qualquer no Linux e dê uma olhada nos exemplos. Nesta mesma pasta crie um xml responsável por sincronizar os bancos de dados. Por exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<job version="8.2">
<syncjob>
<fkcheck check="yes" />
<twowaysync twoway="no" />

<source>
   <host>127.0.0.1</host>
   <user>REMOTE_MYSQL_USER</user>
   <pwd>REMOTE_MYSQL_PASS</pwd>
   <port>PORT_TUNNEL</port>
   <database>REMOTE_MYSQL_DATABASE</database>
</source>

<target>
   <host>127.0.0.1</host>
   <user>LOCAL_MYSQL_USER</user>
   <pwd>LOCAL_MYSQL_PASS</pwd>
   <port>LOCAL_PORT_MYSQL</port>
   <database>LOCAL_MYSQL_DATABASE</database>
</target>

<tables all="yes"/>
<sync_action type="directsync" />
<abortonerror abort="yes" />
   <sendreport send="yes" when="always">
      <smtp>
         <displayname>MEU_NOME</displayname>
         <toemail>MEU_EMAIL@gmail.com</toemail>
         <fromemail>MEU_EMAIL@gmail.com</fromemail>
         <host>smtp.gmail.com</host>
         <encryption>tls</encryption>
         <port>25</port>
         <auth required="yes">
            <user>MEU_EMAIL@gmail.com</user>
            <pwd>MINHA_SENHA</pwd>
         </auth>
         <subject>yyyy-mm-dd hh:mm:ss</subject>
      </smtp>
   </sendreport>
</syncjob>
</job>

Em que:
  • REMOTE_MYSQL_USER e REMOTE_MYSQL_PASS: Usuário e senha MySQL do servidor.
  • PORT_TUNNEL: Porta que criamos anteriormente que servirá como tunelamento.
  • REMOTE_MYSQL_DATABASE: Nome do banco de dados que será sincronizado do servidor.
  • LOCAL_MYSQL_USER e LOCAL_MYSQL_PASS: Usuário e senha MySQL do cliente.
  • LOCAL_PORT_MYSQL: Porta MySQL do cliente (normalmente 3306).
  • LOCAL_MYSQL_DATABASE: Nome do banco de dados do cliente (Não precisa ser o mesmo nome que o servidor).

Note que os dois hosts estão como 127.0.0.1, pois como o tunelamento já está feito, acessamos o servidor como se estivéssemos na própria máquina.

Em <sendreport> coloquei para enviar um e-mail para mim (no caso pelo Gmail) toda vez que ocorrer a sincronização. Acho que a aplicação perde pontos neste quesito por exibir a senha sem criptografia, por exemplo, se sua senha for joaquim123, você terá que deixar lá joaquim123 para quem tiver o acesso ao arquivo ler, o ideal seria impor restrições de acesso ao arquivo.

Em relação às outras tags, <fkcheck> checa a integridade das chaves estrangeiras (se realmente existem), <twowaysync> informa se a sincronização será unilateral ou bilateral, <abortonerror> faz com que o programa termine caso aconteça algum problema e a tag <tables> informa quais tabelas serão sincronizadas, no meu caso vou sincronizar todas.

Existem mais tags, porém para descobri-las a única maneira é testar ou olhar nos exemplos, pois a documentação do SJA é praticamente nula.

Agora execute o seguinte comando e veja as tabelas sendo sincronizadas:

# ./sja meuxml.xml

Caso ocorra algum erro, ele será impresso na tela, e para ver detalhes a respeito do problema basta acessar o arquivo sja.log na mesma pasta que o SJA foi executo, a não ser que você tenha passado o nome do arquivo de log como parâmetro (-l logfile).

Outro fator importante a destacar é que na configuração do MySQL (/etc/mysql/my.conf) a diretiva bind-address = 127.0.0.1 não precisa estar comentada, pois o acesso é feito via SSH. Assim, o MySQL só pode ser acessado através do próprio servidor, tornando-o mais seguro.

Para efetuar a sincronização de tempos em tempos podemos utilizar o cron no Linux, ou o Task Scheduler do Windows. Testei nos dois sistemas operacionais e os dois funcionaram perfeitamente, portanto, não tem desculpa para não usar! =)

Página anterior    

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

Store Procedures com Transaction no MySQL

Amarok: migrando de SQLite para MySQL

MySQL Workbench no Slackware 14.0

Configurando Apache + MySQL + PHP no Slackware

Gerenciando banco de dados com MySQL (Parte 1)

  
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 root@127.123.26.119 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts