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

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

Migrando de Red Hat para Debian

Instalando o Java Plug-in no Mozilla

Leitura recomendada

Shell Script nosso de cada dia - Episódio 3

Desligar servidores quando o nobreak entra na bateria e envio de aviso por e-mail

Como programar backup com rsync e cron de maneira rápida e simples

pam_mount e CiD - Gerenciamento centralizado dos mapeamentos de unidades de rede no Ubuntu

Conheça o projeto BASHSRC

  
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