domingo, 20 de março de 2011

Cron Job - Backup do seu site de jeito fácil

Quando finalizamos um site, é importantíssimo que se tenha um script para fazer backup frequetemente. Já pensou se você tem uma loja, ou um site com galerias de imagens, e de repente alguém o invade, ou acontece algum problema no servidor e você perde tudo?
Com certeza não seria nada agradável ter que fazer tudo de novo, e seus visitantes confusos esperando algo...

Para isso existe as Cron Tabs (Linux), ou o mais conhecido Agendador de Tarefas (Windows). Isso faz com que você programa algum script para ser executado quando quiser.

O site do meu amigo Thiago tem uma introdução muito boa sobre isso, visite! http://blog.thiagobelem.net/o-que-sao-e-como-usar-as-cron-jobs/

Aqui eu vou apresentar o final do post dele.
Vamos supor que temos o site carros.com.br e queremos fazer backup da lista de carros que estão lá, e das imagens deles.
Se você tem na sua hospedagem o painel de controle cPanel, fica fácil. Então acesse ele, vai até o final e procure por Tarefas Cron.
Primeiro digite um endereço de email pra onde será enviado um relatório caso algo dê errado.

Depois em Definições Comuns, selecione de quanto em quanto tempo vai ser executado o código.
Nesse caso vou colocar 'Uma vez por dia' para a lista de carros salvos no banco de dados MySQL.
Agora em comando vc vai colocar:
/usr/bin/mysqldump -h localhost -u <usuario> -p<senha> nome_bd | gzip > /home/<site>/backup/mysql.sql.gz
O que significa?
/usr/bin/mysqldump - executa um programa que vem com o MySQL para copiar o banco de dados
-h localhost - o Host do banco de dados, altere localhost SE necessário. Geralmente esse é o padrão.
-u <usuario> - o nome de usuário do Banco de dados, se o nome fosse gabriel, ficaria -u gabriel
-p<senha> - a senha do usuário do Banco de dados, se a senha fosse webdev, ficaria -pwebdev (note que não há espaço entre -p e a senha)
nome_bd - o nome do banco de dados, se fosse `carros_lista` ficaria: carros_lista.
| gzip - compacta o arquivo para economizar espaço
> destino - depois do > deve vir o destino onde será salvo o arquivo. Geralmente é /home/<o nome do site (seu usuário)>/<a pasta onde quer salvar>/<arquivo>.sql.gz

Usando os exemplos o final ficaria assim:
/usr/bin/mysqldump -h localhost -u gabriel -pwebdev carros_lista | gzip > /home/carros/backup/mysql.sql.gz
Isso é o que deve ser posto na linha de comando no cPanel.
OBS: não esqueça de criar a pasta backup na raíz do site pelo FTP (onde tem as pastas www, public_html, etc...)

Agora vamos salvar as imagens, então crie outra Cron Job.
Para isso vamos imaginar que eles estão na pasta /images/fotos/ do site, e então vamos compactar essa pasta com os arquivos que estão dentro dela.
Vou colocar 'Uma vez por mês' dessa vez, imaginando que não são adicionados carros frequentemente.

E em comando deve ser colocado:
tar czf <destino> <origem>
tar czf -inicia o compactador
<destino>- onde vai ser salvo o arquivo compactado. Ex:
<origem> - local da pasta que será compactada.

Usando nosso exemplo, o comando final ficaria assim:
tar czf /home/carros/backup/fotos.tar.gz /var/www/images/fotos/

Curiosidade: levei cerca de 5 horas pra descobrir e fazer funcionar isso hoje, e não achei nenhum site que me mostrasse dessa forma, fui tentando, usando o que eu sabia, e cheguei nesse ponto, espero que tenha te ajudado!

Dica: se quiser testar primeito o código, coloque o tempo para a cada 5 minutos na cron. Assim ele te enviará um email a cada 5 minutos se algo estiver errado.

Nenhum comentário:

Postar um comentário