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.998 ]

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

Instalando o MySQL Workbench - com solução de possível problemas de dependência

Slackware + MariaDB (MySQL): importando e exportando arquivos TXT

A função DATE_FORMAT() do MySQL

Blindando o MySQL: Configurações de segurança

Sqlite Manager - Plugin do Firefox para criação e manipulação SQL

  
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