Seu servidor, senhor!

Quem nunca precisou de uma rotina de backup para automatizar sua tarefa e sobrar um tempo para bater um CSzinho estudar e aprimorar seus conhecimentos? Pois bem, recentemente precisava fazer backup de algumas bases em MySQL que estavam em um serviço de hospedagem remota Linux, mas não queria ter o trabalho de oreia maçante de ficar todo santo dia, ou semana, ou whatever retirando dumps de minhas bases, que diga-se de passagem são algumas. Portanto, para evitar a preguiça estafa, criei um script que automatiza isso para mim.

A idéia básica de seu funcionamento foi:

  1. Gerar dumps de todas as bases que eram para ser salvas;
  2. Condensá-los  em um arquivo compactado;
  3. Enviar o arquivo compactado para uma conta de e-mail;

E é exatamente esta idéia que vim compartilhar com vocês, queridos colegas de profissão. Para chegar a minha tarefa final utilizei-me de algumas ferramentas. São elas:

  • mysqldump;
  • uuencode;
  • sendmail;
  • tar e gzip;
  • cron;

Mãos à massa! Inicialmente utilizaremos o mysqldump para fazer os backups da base. Esse aplicativo basicamente salva um dump dos dados e estrutura de sua base, a sintaxe básica é:

mysqldump -u <usuario> -p <senha> <base_de_dados> > arquivo.sql

O parâmetro –u indica o usuário da base, seguido por –p indicando a senha e logo depois o nome da base que será feito o backup, redirecionando para um nome de arquivo onde ficará salvo o dump.

Agora iremos compactar o arquivo gerado para ser enviado via e-mail, para isso vamos usar o aplicativo tar seguido do aplicativo gzip. Utilizaremos desta forma porque no meu caso, serão gerados vários arquivos de backup e gostaria de enviá-los em apenas um compactado. Como o tar somente agrupa esses arquivos e não compacta, usaremos juntamente o gzip.

A vantagem é que podemos utilizar os dois em apenas uma linha de comando, utilizando a sintaxe:

tar -zcvf arquivoasergerado.tar.gz <arquivo1, arquivo2...>

Os arquivos já serão agrupados e compactados. ;)

Agora que temos nosso arquivo com o backup compactado, precisamos enviar para o e-mail desejado. Isso é uma coisa bem simples, utilizaremos o aplicativo mail! A forma simples de se enviar um e-mail é:

mail -s “Assunto” [–c “emaildecopia”] <destinatario>

Mas, perai! E como eu envio um anexo? Ráá, ai que entra o aplicativo uuencode! Ele serve para converter binário para texto em um padrão aceitável para sistemas Unix. E para que isso? Para evitar que o arquivo se corrompa ao chegar ao destino, por diferenças em alguns caracteres como quebras de linhas, espaço e outras coisas que existem entre sistemas Unix e Windows. Então combinaremos o uuencode com o mail e enviaremos nosso e-mail com anexo:

uuencode nomedoarquivo.tar.gz nomedoarquivo.tar.gz | mail –s “Backup” admin@service.com.br

Não, o nome do arquivo repetir não é um erro, esta é a sintaxe. Portanto, finalizamos o backup e o envio do nosso arquivo. Tá! E como deixo isso automático e evito o trabalho repetitivo?

Agora temos que utilizar o agendador de tarefas CRON! Para editar o arquivo utilizamos o comando contrab –e. A sintaxe e ordem básica do parâmetros no arquivo é:

<minutos> <horas> <dia do mês> <mês> <dia da semana> [usuário] <comando>

Agora para finalizar nossa tarefa, criamos um script e agendamos para executar quando quisermos. Por exemplo, criamos um script que realiza nossa tarefa para ser executado toda segunda-feira às 07:00. No arquivo do cron ficaria:

0 7 * * * /home/admin/backup.sh

Supondo que nosso script de backup se chame backup.sh. Um exemplo simples desse script seria:

#!/bin/bash

mysqldump -u user1 –psenha1 banco1 > arquivo1.sql

mysqldump -u user2 –psenha2 banco2 > arquivo2.sql

mysqldump -u user3 –psenha3 banco3 > arquivo3.sql

tar –zcvf backup.tar.gz arquivo1.sql arquivo2.sql arquivo3.sql

<a name="_GoBack"></a>uuencode backup.tar.gz backup.tar.gz | mail -s "Backup" sysadmin@admin.com

Galera então é isso, espero ter ajudado! Qualquer dúvida mandem aí nos comments.. ;)


Artigos relacionados:

  1. Script para envio de e-mail autenticado #shell
  2. Dia primeiro é dia de???
  3. Aula Prática – WebCam no Linux
  4. A maneira certa de abrir o arquivo errado!
  5. Tutorial – Conexão SSH sem necessidade de digitar senha