Executando backup do MySQL e enviando por FTP

Neste artigo mostrarei como montar um sistema que realiza o backup de um banco de dados do MySQL e envia o dump automaticamente por FTP para um servidor de sua preferência.

[ Hits: 35.404 ]

Por: william de melo gueiros em 24/06/2003


Introdução



Este mês aconteceu algo comigo que pode parecer piada, mas é verdade. Saí de Taubaté para São Paulo para curtir um pouco na festa skoll beats e quando cheguei na Segunda de manhã crente que passaria o dia contando as novidades, fui surpreendido com a bomba. Um de nossos servidores com um HD SCSI de 80GB havia queimado e nem dava sinal de vida.

Para minha sorte, havia exatamente uma semana que eu tinha instalado um servidor de backup, logo se um servidor parou, basta colocar o outro no ar.

Para vocês terem uma idéia, existiam cinco máquinas penduradas num único no-break, porém em apenas esta algum tipo de curto destruiu o hardware a nível de o próprio teclado não funcionar em nenhuma outra máquina. Foram por água abaixo um disco SCSI, controlador, teclado, placas de rede, placa de vídeo, placa mãe.

Chega de papo furado e vamos ao artigo, que foi escrito baseado num ambiente que roda RedHat, porém neste caso a distribuição Linux não importa, pois os procedimentos aqui apresentados funcionarão em qualquer delas.

Requerimentos

  • Serviço cron na estação que executa o backup
  • MySQL no servidor de produção que precisa de backup
  • Conta de usuário no MySQL com permissão de acesso remoto a partir da estação que executa o backup
  • Conta de usuário no servidor FTP que receberá o backup


MySQL


Como descubro se minha conta de usuário do MySQL tem direito de acesso remoto?
Fácil! Abra um terminal do MySQL com o seguinte comando:

# mysql

Isso te levará ao console do programa, feito isso, digite o seguinte comando:

MYSQL> GRANT ALL PRIVILEGES ON seu_banco_dados.* TO usuario@host_remoto IDENTIFIED BY 'senha_do_usuario' WITH GRANT OPTION;
MYSQL> FLUSH PRIVILEGES;

Onde:
  • seu_banco_dados = o nome do banco de dados que seu usuário precisa ter acesso
  • usuario = login no usuário
  • host_remoto = máquina remota que irá acessar o servidor MySQL
  • senha_do_usuario = o nome já diz tudo né?
Para testar a conexão, a partir do host remoto digite o seguinte comando:

$ mysql -h nome_servidor -u usuario -psenha_do_usuario seu_banco_dados

Se tudo estiver OK, você cairá no terminal do MySQL do servidor.

Backup


Crie um diretório de backup no local de sua preferência, no meu caso optei por /var/backup.

# mkdir /var/backup

E dentro deste diretório vou armazenar o script que realiza backup. Eis o código do arquivo, que vou chamá-lo de backup.sh:

#!/bin/bash

# define o formato do nome do arquivo de backup
NARQUIVO="base--`date +%d_%m_%Y__%H_%M`"

# utiliza o programa mysqldump para efetuar backup no banco de dados do servidor de MySQL,
# direcionando a saída para o arquivo de backup em si. O sinal '&&' no final do
# comando significa que o próximo comando só será executado caso este seja realizado
# com sucesso.
mysqldump --host=servidor_mysql --user=usuario --password=senha_do_usuario --databases seu_banco_dados > /var/backup/$NARQUIVO.sql
&&
# targiando o arquivo para que não fique muito grande e comer a banda da lan
tar -cvzf /var/backup/$NARQUIVO.tar.gz /var/backup/$NARQUIVO.sql

# removendo o arquivo original para liberar espaço
rm -f /var/backup/$NARQUIVO.sql

# espere por 90 segundos
sleep 90

FTPSERVER="servidor de ftp"
USERNAME="usuario de ftp"
PASSWORD="sua senha"
LOCALDIR="/var/backup"

# conecte-se ao servidor FTP e envie o arquivo
ftp -ni $FTPSERVER <<FIM
user $USERNAME $PASSWORD
lcd $LOCALDIR
mdelete *.tar.gz
mput $NARQUIVO.tar.gz
bye
FIM

Agora dê permissão de execução ao script:

# chmod 755 /var/backup/backup.sh

E agende sua execução a partir do crontab. No meu caso, escolhi fazer backup uma vez por hora:

# crontab -e
0 */1 * * * /var/backup/backup.sh

Gostaria de agradecer ao Fábio, pois aproveitei seu script de fazer FTP como ponto de partida para o resto das funcionalidades.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Capturando conteúdo de sites em PHP

Instalando o Java Plug-in no Mozilla

Migrando de Red Hat para Debian

Leitura recomendada

Extracttext - como extrair texto de uma área selecionada da tela

Backup automatizado com HD externo

Script GitPratico para criar repositórios remotos sem logar no GitHub

Simples sistema de backup com acesso remoto

Relatório de sistema via browser (shell script + CGI)

  
Comentários
[1] Comentário enviado por kabalido em 05/07/2007 - 11:48h

Muito bom esse seu artigora cara.
Parabéns

[2] Comentário enviado por kabalido em 05/07/2007 - 11:48h

Muito bom esse seu artigo cara.
Parabéns

[3] Comentário enviado por R4F43L*3SP em 10/07/2009 - 18:07h

Aprendi mais uma com o seu script
Parabéns


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts