Skip to content

Instantly share code, notes, and snippets.

@abhishek77in
Forked from rantoniuk/backup.rake
Last active April 13, 2021 00:09
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save abhishek77in/4249681 to your computer and use it in GitHub Desktop.
Save abhishek77in/4249681 to your computer and use it in GitHub Desktop.
Rake task for backing up MySQL database to AWS-S3 in Rails Application
namespace :db do desc "Backup database to AWS-S3"
task :backup => [:environment] do
datestamp = Time.now.strftime("%Y-%m-%d_%H-%M-%S")
backup_filename = "#{Rails.root.basename}-#{datestamp}.sql"
db_config = ActiveRecord::Base.configurations[Rails.env]
# process backup
`mysqldump -u #{db_config['username']} -p#{db_config['password']} -i -c -q #{db_config['database']} > tmp/#{backup_filename}`
`gzip -9 tmp/#{backup_filename}`
puts "Created backup: #{backup_filename}"
# save to aws-s3
bucket_name = "#{Rails.env}-database-backup" #gotcha: bucket names are unique across AWS-S3
AWS.config(
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
)
s3 = AWS::S3.new
bucket = s3.buckets[bucket_name]
unless bucket.exists?
s3.buckets.create(bucket_name)
end
object = bucket.objects[File.basename(backup_filename)]
object.write(:file => "tmp/#{backup_filename}.gz")
# remove local backup file
`rm -f tmp/#{backup_filename}.gz`
end
end
# USAGE
# =====
# rake db:backup
#
# REQUIREMENT
# ===========
# gem: aws-sdk
#
# CREDITS
# =======
# http://www.rubyinside.com/amazon-official-aws-sdk-for-ruby-developers-5132.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment