Skip to content

Instantly share code, notes, and snippets.

@andrewyoo
Created February 1, 2012 18:55
Show Gist options
  • Save andrewyoo/1718643 to your computer and use it in GitHub Desktop.
Save andrewyoo/1718643 to your computer and use it in GitHub Desktop.
Backup mysql DB to S3 in ruby
require 'rubygems'
require 'aws/s3'
include AWS::S3
Base.establish_connection!(
:access_key_id => '#####################',
:secret_access_key => '###############################'
)
today = Time.now.strftime("%Y%m%d")
db_user = 'root'
db_password = '#########'
bucket_name = '############'
#create backup files and gzip them
`mysqldump -u #{db_user} -p#{db_password} --all-databases --lock-tables > mysql_#{today}.sql`
`gzip mysql_#{today}.sql`
S3Object.store("mysql_#{today}.sql.gz", open("mysql_#{today}.sql.gz"), bucket_name)
`rm -rf mysql_#{today}.sql.gz`
# cleanup old backups. Leave only ones within 60 days and 1st of the month
keys_to_delete = []
bucket = Bucket.find(bucket_name)
bucket.objects.each do |o|
match = o.key.match(/(\d{4})(\d{2})(\d{2})/)
next if match[3]=='01'
file_date = Date.parse("#{match[1]}-#{match[2]}-#{match[3]}")
keys_to_delete << o.key if (file_date+60) < Date.today
end
keys_to_delete.each do |k|
S3Object.delete(k,bucket_name)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment