Notícia do dia: 07 de Mar de 2004
17h32min » Backup automático em MySQL
Fiz um pequeno sistema que faz backup do banco de dados do site Notícias Linux que envia para um ftp diariamente. O sistema foi feito para que ele crie 7 cópias, uma a cada dia da semana, evitando que se ocorrer algum problema ele envie um backup vazio e substitua a última cópia.
Escrevi os passos de como foi feito pois pode ser útil para quem possui sites ou sistemas em MySQL e não possui backups. Os passos abaixo podem ser usados para qualquer tipo de dados, não precisa necessariamente ser usado apenas para cópia de MySQL, um sistema parecido fazia o mesmo quando o site Notícias Linux era em Perl com banco de dados em um arquivo
.txt.
Primeiro precisamos fazer uma cópia dos dados e para isso usei o mysqldump que é um aplicativo que vem junto com o MySQL. Logo depois faço com que o sistema zipe o arquivo
.sql criado, deleto o .sql e envio por ftp para um outro servidor usando o ncftp.
Coloquei todos os comandos em um script shell e adicionei no cron para executar uma vez por dia.
Veja o script abaixo:
#!/bin/bash
DATA=`DATE | cut -d" " -f1`
/usr/BIN/mysqldump --databases nomebancodedados --quote-names -hhosting.com.br -ulogin -psenha > /home/usuario/backup/backup.sql
/usr/BIN/zip -r /home/usuario/backupb/backup-$DATA.zip /home/usuario/backup/backup.sql
/BIN/rm -f /home/usuario/backup/backup.sql
/usr/BIN/ncftpput -u'loginftp' -p'senhaftp' 'ftp.outroservidor.com' diretorionooutroservidor/ /home/usuarion/backup/backup-$DATA.zip
/BIN/rm -f /home/usuarion/backup/backup-$DATA.zip
A primeira linha cria o arquivo .sql e você deve substituir o "nomebancodedados" para o nome do seu e ao lado de -h, -u e -p você deve colocar o endereço, login e senha de conexao ao MySQL.
Note que eu coloquei os caminhos completos dos aplicativos e dos diretórios onde os arquivos vão ser gravados, isso é importante já que o script vai rodar no cron.
Após as alterações necessárias salve o arquivo com o nome de 'backup' e dê permissão para execução com o chmod +x backup.
Agora acrescente uma linha no seu cron para que ele execute esse script 1 vez ao dia.
Para acrescentar a linha no cron siga os passos abaixo:
export EDITOR=mcedit ou export VISUAL=mcedit (em algumas distribuições linux eu usa a variável EDITOR mas no Slackware eu uso a variável VISUAL. Substitua mcedit pelo seu editor prefererido).
Digite
crontab -e e digite a linha abaixo:
00 5 * * * /home/usuario/backup/backup 2>&1> /dev/NULL
Agora todos os dias as 5 da manhã o script será executado.
Dicas
- O aplicativo ncftpput faz parte do pacote ncftp e pelo que notei ele é comum em várias distribuições linux.
- Você pode usar o parâmetro -e caso seu zip suporte encriptação, isso dará maior segurança para as cópias dos seus dados.
- Se um dia você precisar recuperar o mysql com seu backup, descompacte o arquivo de backup faça assim:
mysql -uusuario -psenha -hhosting < backup.sql