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! =)