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

Por: Henrique Ribeiro Rezende em 19/07/2010


Tunelamento SSH (opcional)



Para a conexão entre os bancos de dados criaremos um túnel SSH. Assim a sincronização ficará mais segura e não precisaremos deixar a porta do MySQL com acessos externos. Nos exemplos vamos considerar esta sincronização unilateral. Para fazer uma sincronização bilateral, basta aplicar o tunelamento SSH em ambos os lados. Como estamos supondo uma sincronização unilateral, vamos considerar o cliente como a máquina que vai sincronizar seu banco com o servidor. Vale ressaltar que esta parte é opcional, caso não haja necessidade de transferir os dados de maneira segura basta ignorar esta parte.

Basicamente iremos mapear uma porta do computador cliente para que ao entrarmos, estejamos acessando uma porta do servidor (no caso, a porta do MySQL, 3306). Toda esta conexão será feita através de SSH. Portanto, na realidade não estamos acessando diretamente a porta 3306 do servidor, e sim a porta 22. Assim que criarmos esta conexão, teremos acesso ao MySQL como se estivéssemos dentro do servidor.

Se executarmos o comando abaixo, teremos um tunelamento SSH entre duas máquinas. Não convém a este tutorial explicar como funciona cada parâmetro abaixo. Para isto, basta verificar neste site* o motivo de cada parâmetro.

# ssh -f -L local-port:remote-address:remote-port login-name sleep 60 >> logfile

Sendo que local-port é a porta local (do cliente) a qual queremos acessar diretamente no servidor, remote-address:remote-port é o endereço do servidor com a porta a qual acessaremos o MySQL. O SSH mapeará este endereço com esta porta na local-port do cliente, portanto aqui colocaremos 127.0.0.1:3306 que é o endereço do MySQL de dentro do servidor, e login-name é o login usado para conectar no servidor (Por exemplo root@ServerAddress).

Porém toda vez que executarmos esse comando ele pedirá a senha do servidor e isto não é interessante para a aplicação. Para não termos que digitar esta senha a cada conexão, basta criarmos uma chave DSA no cliente e colocarmos no servidor. Assim o servidor sempre aceitará conexão vinda da máquina que gerou a chave.

Para isso, basta executarmos os seguintes comandos no cliente:

# ssh-keygen -t dsa -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub | ssh login-name 'cat - >> ~/.ssh/authorized_keys'
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


Na primeira linha estamos criando uma chave DSA e armazenando em id_dsa. Neste caso estamos usando o parâmetro DSA devido ao suporte ao SSH versão 2. Se seu sistema suporta somente o SSH versão 1, troque esta opção por rsa1.

Na segunda e terceira linha, colocamos a chave dentro do arquivo de chaves autorizadas no cliente e no servidor. login-name é o login do servidor, conforme já informado acima.

Repita o comando para criar o tunelamento e repare que não será pedida a senha novamente.

Referência: PHP, MySQL and SSH Tunneling (Port Forwarding) « The Metric System

Página anterior     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

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

Replicação em banco de dados MySQL

Administrando bancos MySQL com phpMyAdmin

Instalando o MySQL no Slackware

Gambas2 e MySQL, aprofundando relações

  
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