class MysqlAwsBackup

Constants

REQUIRED_ENV

Public Class Methods

new() click to toggle source
# File lib/mysql_aws_backup.rb, line 15
def initialize
  ensure_environment_variables_defined
  @t1 = Time.now
  @outfile = "#{ENV['MYSQL_AWS_BACKUP_FILE_PREFIX']}-#{@t1.to_s.gsub(/\:/, '.').gsub(/ /, '_')}.sql.gz"
  @mysqldump = `which mysqldump`.chomp
  @cmd = "#{@mysqldump} --add-drop-database --databases #{ENV['MYSQL_AWS_BACKUP_DATABASE']} -h #{ENV['MYSQL_AWS_BACKUP_HOST']} -u #{ENV['MYSQL_AWS_BACKUP_MYSQL_USER']} -p#{ENV['MYSQL_AWS_BACKUP_MYSQL_PASSWORD']} | gzip > #{@outfile}"
end

Public Instance Methods

perform() click to toggle source
# File lib/mysql_aws_backup.rb, line 23
def perform
  do_mysql_dump
  do_upload_backup_to_s3
  clean
  t2 = Time.now
  puts "#{t2} Created and uploaded #{@outfile} in #{t2 - @t1} seconds."
end

Private Instance Methods

clean() click to toggle source
# File lib/mysql_aws_backup.rb, line 61
def clean
  File.delete(@outfile)
end
do_mysql_dump() click to toggle source
# File lib/mysql_aws_backup.rb, line 33
def do_mysql_dump
  system(@cmd)
end
do_upload_backup_to_s3() click to toggle source
# File lib/mysql_aws_backup.rb, line 37
def do_upload_backup_to_s3
  AWS.config(access_key_id: ENV['MYSQL_AWS_BACKUP_AWS_ACCESS_KEY_ID'],
             secret_access_key: ENV['MYSQL_AWS_BACKUP_AWS_SECRET_ACCESS_KEY'],
             region: ENV['MYSQL_AWS_BACKUP_AWS_REGION'])

  s3 = AWS::S3.new

  b = s3.buckets[ENV['MYSQL_AWS_BACKUP_BUCKET']]
  s3.buckets.create(ENV['MYSQL_AWS_BACKUP_BUCKET']) unless b.exists?

  basename = File.basename(@outfile)
  o = b.objects[basename]
  o.write(file: @outfile)
end
ensure_environment_variables_defined() click to toggle source
# File lib/mysql_aws_backup.rb, line 52
def ensure_environment_variables_defined
  failures = []
  REQUIRED_ENV.each do |required_variable|
    message = "You must define environment variable '#{required_variable}'."
    failures << message unless ENV.has_key? required_variable
  end
  fail failures.join(' ') unless failures.empty?
end