Uma das tarefas vitais é o backup do banco de dados e dos arquivos de uma aplicação.
Esta tarefa as vezes pode ser complicada e cansativa, para nossa sorte existe duas gems que tornam essa tarefa extremamente simples, a astrails-safe e a whenever, neste post vou exemplificar a utilização destas ótimas gems que oferecem recursos muito requisitados como backup remoto.
Uma das forma de realizar backups automáticos do banco de dados é usar um script mysql dump junto com um cronjob.
porem configurar o crontab não é uma tarefa simples, para facilitar esta configuração utilizaremos a gem whenever que tem uma sintaxe simples para criação de cron jobs.
e utilizaremos também a gem astrails-save, que é um sistema para backups não só do banco de dados mas também dos arquivos e com suporte a CDN's como o Amazom S3 e o Rackspace Cloud Files.
no caso estou utilizando Rails 3.0.4 e Ruby 1.8.7. o primeiro passo é adicionar as linhas abaixo ao Gemfile.
gem 'whenever'
gem 'astrails-safe'
astrails-safe [OPTIONS] CONFIG_FILE
as [OPTIONS] são:
-h, --help Mostrar a ajuda
-v, --verbose executa todos os backups configurados!
-n, --dry-run apenas testa, não executa.
-L, --local Fazer somente backups locais, ignorando os remotos.
o CONFIG_FILE é um arquivo .rb eu criei o arquivo "safe_config.rb" no diretório config.
abaixo tem um exemplo retirado da documentação da gem, com algumas partes traduzidas.
safe do
local :path => "/backup/:kind/:id"
s3 do
key "...................."
secret "........................................"
bucket "backup.astrails.com"
path "servers/alpha/:kind/:id"
end
cloudfiles do
user "..........."
api_key "................................."
container "safe_backup"
path ":kind/" # this is default
service_net false
end
sftp do
host "sftp.astrails.com"
user "astrails"
# port 8023
password "ssh password for sftp"
end
gpg do
command "/usr/local/bin/gpg"
options "--no-use-agent"
# symmetric encryption key
# password "qwe"
#chave pública GPG (deve ser conhecida com GPG, ou seja, estar no chaveiro
key "backup@astrails.com"
end
keep do
local 20
s3 100
cloudfiles 100
sftp 100
end
mysqldump do
options "-ceKq --single-transaction --create-options"
user "root" #seu usuário
password "............" #sua senha
socket "/var/run/mysqld/mysqld.sock"
#liste todas as tabelas que deseja efetuar o backup
database :blog
database :servershape
database :astrails_com
# você pode ignorar algumas tabelas
database :secret_project_com do
skip_tables "foo"
skip_tables ["bar", "baz"]
end
end
svndump do
repo :my_repo do
repo_path "/home/svn/my_repo"
end
end
pgdump do
options "-i -x -O" # -i => ignorar versão, -x => não configurar privilegios (grant/revoke), -O => skip restoration of object ownership in plain text format
user "username"
password "............" # shouldn't be used, instead setup ident. Current functionality exports a password env to the shell which pg_dump uses - untested!
database :blog
database :stateofflux_com
end
#Para efetuar os backups dos arquivos
tar do
options "-h" # dereference symlinks
archive "git-repositories", :files => "/home/git/repositories"
archive "dot-configs", :files => "/home/*/.[^.]*"
archive "etc", :files => "/etc", :exclude => "/etc/puppet/other"
archive "blog-astrails-com" do
files "/var/www/blog.astrails.com/"
exclude "/var/www/blog.astrails.com/log"
exclude "/var/www/blog.astrails.com/tmp"
end
archive "astrails-com" do
files "/var/www/astrails.com/"
exclude ["/var/www/astrails.com/log", "/var/www/astrails.com/tmp"] #adicione os arquivos aos quais você não deseja que sejam salvos.
end
end
end
apos ter o arquivo "safe_config.rb" configurado você pode executar o comando abaixo para realizar o backup:
astrails-safe -L safe_config.rb
#para backup somente local
astrails-safe -v safe_config.rb
#para executar o arquivo de configuração na integra, executando os backups local e remoto.
agora vamos tornar a execução deste comando automático e periódico através da gem whenever.
utilize o comando abaixo para criar o arquivo de configuração, que estará no diretório config da aplicação.
wheneverize .
caso não execute é possível que seja necessário adicionar a gem ao PATH.
abra o arquivo criado, "schedule.rb" e adicione as linha abaixo:
every 1.days do
#Eu defini que será executado esse comando a cada 1 dia você pode alterar de acordo com sua necessidade.
command "/diretorio_da_sua_aplicação/config/astrails-safe -L safe_config.rb"
#substitua o '-L' para '-v' caso queira executar backup remoto
end
para gravar as alterações no config do Crontab
whenever --update-crontab store
Pronto agora a aplicação está gerando backups automáticos a cada 1 dia.