Migração MySQL via Rsync

Caro amigo leitor,

Esta com aquele servidor “respirando por aparelhos”, que em qualquer reboot o risco de complicações é fatal? Talvez este metodo de migração seja o mais eficaz e rápido para salvar as suas bases.

A migração de um servidor MySQL com rsync pode ser feita em qualquer distribuição Linux, seguindo as regras:

– A versão do MySQL no servidor de origem e destino devem ser a mesma;
– A porta 22 deve estar liberada entre os servidores;
– Os parâmetros de configuração de logs e table_spaces devem ser o mesmo na origem e destino (ibdata, iblog);

– O usuário mysql deve estar habilitado para login no sistema

1. Preparando o ambiente

Como o rsync vai ser executado através do usuário mysql, é necessário habilita-lo para login no S.O através do arquivo /etc/passwd:

A. No servidor de origem, você deve gerar uma chave rsa para o servidor de destino, dentro do usuário mysql:

B. Com isso, navegue até o diretório .ssh dentro do usuário mysql, e copie o conteudo gerado do id_rsa.pub:

Seguindo desta forma, teremos este resultado:

ssh8
C. No servidor de destino, repita o mesmo processo do passo (a), para que seja criada a estrutura do diretório .ssh.

D. Agora devemos copiar o conteúdo do arquivo id_rsa.pub do servidor de origem, e inseri-lo no servidor de destino, em um arquivo chamado authorized_keys.

A copia pode ser feita da maneira que você achar mais fácil, uma dica é fazer o processo via scp, exemplo:

E. Após a criação do arquivo authorized_keys no servidor de destino, não se esqueça de ajustar o owner do arquivo para o usuário mysql:

F. Feito isso, a comunicação via ssh entre o servidor origem e destino deve ocorrer normalmente através do usuário mysql:

ssh2

 

2 – Efetuando a Migração

Caso a sua janela de migração seja apenas de madrugada, você pode efetuar o rsync varias vezes ao longo dia, para que a noite o ultimo sync seja mais rápido.

Obs: Lembre-se de ajustar as variáveis dos arquivos de configuração (my.cnf) para o servidor de destino, caso exista algum parâmetro diferente, conforme mencionado no inicio do post.

A. No servidor de destino, remova todos os diretórios do /var/lib/mysql ou renomeie para /var/lib/mysql_old :

B. No servidor de origem, logue com o usuário mysql, e confirme que você esta no diretório de dados do mysql, mais propriamente o datadir:

C. Após logar com o usuário mysql, inicie o rsync:

Na primeira execução, o comando vai copiar toda a estrutura dos arquivos para o servidor de destino, e isso será informado no console. A partir da segunda execução, o rsync fara a cópia incremental dos arquivos, sendo mais vantajoso.

ssh3
Ou seja, se o mysql ter novas transações ou criações de base, o rsync vai copia-los, seja um arquivo novo ou incremental ao que ele já tem.

D. Para concluir, pare o serviço do MySQL e execute o rsync com o parâmetro –delete, onde ele vai manter no destino a mesma estrutura que estiver na origem, ou seja, se por ventura inserirem algum diretório/arquivo no servidor de destino, o rsync ira remove-lo, mantendo da mesma forma que se encontra no servidor de origem.

ssh4

Neste caso, propositalmente inseri um arquivo “ze” no servidor de destino, como ele não existia na origem, o rsync o removeu do destino. Muito cuidado ao utilizar este parâmetro em um ambiente de produção, tenha certeza do diretório onde o rsync será executado, caso contrário o estrago pode ser grande.

Feito isso, desabilite o serviço MySQL no servidor de origem, reveja os arquivos de configurações no destino e de um start no MySQL.

ssh5

S.O utilizado – Debian 8

Um abraço ao amigo DBA Jose Arthur que matou a questão do –delete do rsync 😀

É isso ai pessoal.

Dúvidas, criticas ou sugestões? Fiquem a vontade, todo retorno é construtivo 🙂

Jose Wilson

Deixe uma resposta