Backups automáticos mysql com shell script e crontab
Requerimentos:
- Um servidor que permita você logar via SSH.
- O servidor precisa permitir que você rode scripts shell scripts e tenha acesso ao mysql via linha de comando.
Definindo as variáveis:
#!/usr/bin/bash #Variables sr="localhost" #remote server lg="nome_do_usuario_do_mysql" #login name pw="senha" #password hs="all" #file name to store sql file bk="$HOME/dbackup" #path to store backup files nw=$(date "+%Y%m%d") #get date as string nb=60 #maximum number of files that will be keep
A primeira linha é o caminho do interpretador do shell script. Varia conforme a configuração do servidor. Este que aparece é para a Dreamhost.
Você vai precisar editar, colocando os seus valores nas seguintes variáveis:
- sr: nome do seu servidor, normalmente “localhost”, mas para a Dreamhost é sempre “mysql.dominio.com.br”
- lg: nome do seu usuário do servidor mysql
- pw: senha do seu usuário do servidor mysql
Se quiser, mude estas aqui com os seus valores:
- hs: nome do arquivo temporário mysql
- bk: nome do diretório onde ficarão armazenados as cópias do banco de dados. A variável $HOME deve ser mantida.
- nb: número de cópias do banco de dados. Como a Dreamhost me dá mais de 20 gigas de espaço em disco, e todos os meus bancos somados e compactados ficam em 10 Mb, eu armazeno 60 cópias, uma para cada dia de dois meses.
Agora, a funçao:
function backup() { echo "Getting data from mysql server" mysqldump -u$lg -p$pw -h$sr --add-drop-table --quote-names --all-databases --add-drop-database > "$HOME/$hs.sql" echo "Compressing $fn.sql.gz file ..." gzip -f "$HOME/"$fn.sql if [ -d $bk ]; then continue else mkdir $bk fi cp -f "$HOME/"$hs.sql.gz "$bk/$nw.sql.gz" a=0 b=$(ls -t $bk) c=$nb for arq in $b; do a=$(($a+1)) if [ "$a" -gt $c ]; then rm -f "$bk/$arq" fi done }
O comando mais importante aqui é o mysqldump. Com estes parâmetros, ele vai pegar todos os bancos de dados que estão no servidor definido na variável “sr”.
mysqldump -u$lg -p$pw -h$sr --add-drop-table --quote-names --all-databases --add-drop-database > "$HOME/$hs.sql"
O próximo comando compacta o arquivo sql gerado no diretório definido pela variável $HOME.
gzip -f "$HOME/"$fn.sql
O comando a seguir é quase cosmético. Ele cria o diretório para você automaticamente, caso ele não exista:
if [ -d $bk ]; then continue else mkdir $bk fi
Então, ele copia o arquivo gzipado para o diretório de backup, usando a data do sistema para gerar o nome, no formato AAAAMMDD.sql.gz. Ex: 20080603.sql.gz:
cp -f "$HOME/"$hs.sql.gz "$bk/$nw.sql.gz"
E como não queremos estourar o limite do nosso espaço no servidor, o trecho a seguir faz a limpeza, deletando o arquivo de backup número $nb + 1, isto é, o arquivo mais velho criado anteriormente e de número maior do que o que você definiu na variável nb, ou seja, o 61 neste caso.
a=0 b=$(ls -t $bk) c=$nb for arq in $b; do a=$(($a+1)) if [ "$a" -gt $c ]; then rm -f "$bk/$arq" fi done
E para terminar, coloque na ultima linha do script:
backup
Salve em um arquivo, exemplo backup.sh, em formato texto puro, em formato UNIX (LF). Um editor gratuito que faz isto é o PSPAD.
Agora acesse o shell do seu servidor e rode o crontab.
crontab -e
E coloque no final do arquivo a linha:
0 6 * * * sh /home/user/backup.sh
Onde “home/user” é o caminho até seu arquivo backup.sh. Esta linha diz para seu servidor fazer uma cópia todo dia as 06:00 h. Se estiver usando o Nano como editor, tecle CRTL+o para salvar o arquivo, depois CRTL+x para sair.
Para restaurar o banco, primeiro descompate-o, depois rode o mysq.
gunzip -f "$HOME/dbbackup/nome_do_arquivo.sql.gz" mysql -uusuario -psenha -hlocalhost < "$HOME/dbbackup/nome_do_arquivo.sql"
Importante: não coloque o script em um diretório que possa ser acessado pelo público, já que os dados de acesso ao banco estão nele.
Fonte: www.sgd.com.br
Dicas para compactar e descompactar arquivos
Este é um pequeno guia rápido para que você possa compactar, descompactar e visualizar arquivos no console do linux.
Introdução
GZIP e TAR são dois utilitários muito usados no Linux para a compactação de arquivos. Muitos dos programas e documentos disponíveis na Internet para Linux, se encontram nestes formatos. Este tutorial mostrará como usar os recursos básicos destas duas ferramentas. (mais…)
Backup com RSYNC sem senha
Introdução
Pode parecer estranho o título do tutorial. E é estranho mesmo. Mas pior seria o verdadeiro título como “rsync utilizando SSH sem que você tenha que digitar a senha de acesso todas as vezes que rodar o script”. Como este título seria muito grande, resolvi abreviar e explicar ao longo do tutorial.
Todos nós temos a necessidade de fazer cópias de segurança (ou backup) de informações, sejam estas entre estações e um servidor, entre servidores ou até mesmo entre estações. O Linux* conta com várias ferramentas interessantes para estas tarefas, sendo uma delas o rsync, um pequeno aplicativo que permite a cópia de arquivos de uma máquina para outra de forma segura.
Não estarei aqui discutindo como usar o rsync mas sim como permitir que um script acesse um servidor ou outra máquina sem que o usuário tenha que digitar a senha de acesso, podendo assim agendar o script para que seja executado de tempos em tempos. (mais…)