Backup do Banco com Rake

marcus / 20.Jul.2007

U m task para o rake que faz o backup do banco de dados. Na verdade, uma ligeira melhoria nesta task para utilizar o host durante a execução do mysqldump, necessário para dump na Dreamhost.

Dentro da pasta lib/tasks, crie um arquivo chamado backup.rake com o conteúdo abaixo.

require 'find'
namespace :db do
  desc "Backup the database to a file. Options: DIR=base_dir RAILS_ENV=production"
  task :backup => [:environment] do
    datestamp = Time.now.strftime("%Y-%m-%d")
    hourstamp = Time.now.strftime("%H-%M-%S")
    base_path = ENV["DIR"] || "db"
    backup_base = File.join(base_path, 'backup')
    backup_folder = File.join(backup_base, datestamp)
    backup_file = File.join(backup_folder, "#{RAILS_ENV}_#{hourstamp}_dump.sql")
    File.makedirs(backup_folder)
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    host = " -h #{db_config['host']} " if db_config['host'] and !db_config['socket']
    sh "mysqldump #{host} -u #{db_config['username']} -p#{db_config['password']} #{db_config['database']} > #{backup_file} ; bzip2 -z #{backup_file}"
    dir = Dir.new(backup_base)
    all_backups = dir.entries[2..-1].sort.reverse
    puts "Created backup: #{backup_file}.bz2"
  end
end

Depois é só executar:

rake db:migrate

ou

rake db:migrate RAILS_ENV=production

E para resturar o banco:

bzcat db/backup/2007-07-20/production_18-11-43_dump.sql.bz2 | mysql -u root mephisto_development

(manual ainda – talvez idéia para uma outra task. Mas prefiro não facilitar muito o restore por enquanto, pois pode causar estragos.)

2 Comments

Interessante … hehe

Humm legal, vou atualizar a minha hehe ;)

Sorry, comments are closed for this article.

back to top

micro theme by seaofclouds, and powered with Mephisto

Clicky Web Analytics