Skip to content

Instantly share code, notes, and snippets.

@romiras
Forked from stevebartholomew/gist:50180
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save romiras/58485db8bf3d499dcf72 to your computer and use it in GitHub Desktop.
Save romiras/58485db8bf3d499dcf72 to your computer and use it in GitHub Desktop.
MySQL backup rake task for Rails 2.3.x
# put this file into directory <RAILS_ROOT>/lib/tasks
namespace :db do
desc "Backup database"
task :backup do
RAILS_ENV = "development" if !defined?(RAILS_ENV)
settings = YAML.load(File.read(File.join(Rails.root, "config", "database.yml")))[RAILS_ENV]
bak_dir = ENV['BAK_DIR']
raise(RuntimeError, "==> Error: environment variable BAK_DIR not set.") if bak_dir.blank?
extra_parameters = ["--default-character-set=utf8"]
extra_parameters << "-h #{settings['host']}" unless settings['host'].blank?
unless ENV['SKIP_TABLES'].blank?
ENV['SKIP_TABLES'].split(",").each do |tbl|
extra_parameters << "--ignore-table=#{settings['database']}.#{tbl}"
end
end
extra = extra_parameters.empty? ? "" : extra_parameters.join(" ")
output_file = File.join(bak_dir, "#{settings['database']}-#{Time.now.strftime('%Y%M%d-%H%M')}.sql.gz")
system("/usr/bin/env mysqldump -u #{settings['username']} -p'#{settings['password']}' #{extra} #{settings['database']} | gzip > #{output_file}")
end
# usage: RAILS_ENV=production BAK_DIR=/path/to/backup SKIP_TABLES=sessions,logs bundler exec rake db:backup
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment