backup task handles postgresql dumps

This commit is contained in:
Justin Thomas 2011-10-29 23:35:02 -07:00
parent 0c818cf359
commit 68d5f9d196

View file

@ -3,9 +3,9 @@ namespace :backup do
require File.join(Rails.root, 'config', 'initializers', '_load_app_config.rb') require File.join(Rails.root, 'config', 'initializers', '_load_app_config.rb')
require 'cloudfiles' require 'cloudfiles'
task :mysql do task :database do
NUMBER_OF_DAYS = 3 NUMBER_OF_DAYS = 3
puts("event=backup status=start type=mysql") puts("event=backup status=start type=database")
db = YAML::load(File.open(File.join(File.dirname(__FILE__), '..','..', 'config', 'database.yml'))) db = YAML::load(File.open(File.join(File.dirname(__FILE__), '..','..', 'config', 'database.yml')))
user = db['production']['username'] user = db['production']['username']
password = db['production']['password'] password = db['production']['password']
@ -20,30 +20,45 @@ namespace :backup do
puts "Logging into Cloud Files" puts "Logging into Cloud Files"
cf = CloudFiles::Connection.new(:username => AppConfig[:cloudfiles_username], :api_key => AppConfig[:cloudfiles_api_key]) cf = CloudFiles::Connection.new(:username => AppConfig[:cloudfiles_username], :api_key => AppConfig[:cloudfiles_api_key])
mysql_container = cf.container("MySQL Backup")
puts "Dumping Mysql at #{Time.now.to_s}" if db['production']['adapter'] == 'postgresql'
`mkdir -p /tmp/backup/mysql` container = cf.container("PostgreSQL Backup")
`nice mysqldump --single-transaction --quick --user=#{user} --password=#{password} #{database} > /tmp/backup/mysql/backup.txt `
puts "Gzipping dump at #{Time.now.to_s}" puts "Dumping PostgreSQL at #{Time.now.to_s}"
tar_name = "mysql_#{Time.now.to_i}.tar" `mkdir -p /tmp/backup/postgres`
`nice tar cfPz /tmp/backup/#{tar_name} /tmp/backup/mysql` `PGPASSFILE=/etc/pgpass.conf nice pg_dump -h localhost -p 5432 -U #{user} #{database} > /tmp/backup/postgres/backup.txt `
file = mysql_container.create_object(tar_name) puts "Gzipping dump at #{Time.now.to_s}"
tar_name = "postgres_#{Time.now.to_i}.tar"
`nice tar cfPz /tmp/backup/#{tar_name} /tmp/backup/postgres`
file = container.create_object(tar_name)
elsif db['production']['adapter'] == 'mysql2'
container = cf.container("MySQL Backup")
puts "Dumping Mysql at #{Time.now.to_s}"
`mkdir -p /tmp/backup/mysql`
`nice mysqldump --single-transaction --quick --user=#{user} --password=#{password} #{database} > /tmp/backup/mysql/backup.txt `
puts "Gzipping dump at #{Time.now.to_s}"
tar_name = "mysql_#{Time.now.to_i}.tar"
`nice tar cfPz /tmp/backup/#{tar_name} /tmp/backup/mysql`
file = container.create_object(tar_name)
end
puts "Uploading archive at #{Time.now.to_s}" puts "Uploading archive at #{Time.now.to_s}"
if file.write File.open("/tmp/backup/" + tar_name) if file.write File.open("/tmp/backup/" + tar_name)
puts("event=backup status=success type=mysql") puts("event=backup status=success type=database")
`rm /tmp/backup/#{tar_name}` `rm /tmp/backup/#{tar_name}`
files = mysql_container.objects files = container.objects
files.sort!.pop(NUMBER_OF_DAYS * 24) files.sort!.pop(NUMBER_OF_DAYS * 24)
files.each do |file| files.each do |file|
mysql_container.delete_object(file) container.delete_object(file)
end end
else else
puts("event=backup status=failure type=mysql") puts("event=backup status=failure type=database")
end end
end end