· 10 years ago · Feb 08, 2016, 06:30 PM
1require 'date'
2require 'aws/s3'
3
4class Settings
5 attr_accessor :username, :password, :database, :mysql_location, :access_key, :secret_key, :bucket_name
6end
7
8user_settings = Settings.new
9user_settings.username = DATABASE_USERNAME
10user_settings.password = DATABASE_PASSWORD
11user_settings.database = DATABASE_NAME
12user_settings.mysql_location = LOCATION_OF_mysqldump_COMMAND
13
14user_settings.access_key = AWS_S3_ACCESS_KEY
15user_settings.secret_key = AWS_S3_SECRET_KEY
16user_settings.bucket_name = S3_BUCKET_NAME
17
18def mysql_to_s3(settings)
19
20 puts "Starting mysql_to_s3 for username: \"" + settings.username + "\"..."
21
22 dumpfile = DateTime.now.to_s + ".sql"
23
24 command_string = settings.mysql_location + " -u " + settings.username + " -p" + settings.password + " --databases " + settings.database + " > " + dumpfile
25 status = system command_string
26 if status
27 puts "Database backed up."
28 else
29 puts "Error in backing up database."
30 return
31 end
32
33 AWS::S3::Base.establish_connection!(
34 :access_key_id => settings.access_key,
35 :secret_access_key => settings.secret_key
36 )
37
38 begin
39 puts "Looking for bucket..."
40 bucket = AWS::S3::Bucket.find(settings.bucket_name)
41 puts "Bucket found."
42 rescue Exception => e
43 puts e.message
44 puts "Error: Bucket " + settings.bucket_name + " might not be present in your Amazon S3 account."
45 puts "Deleting backup file from local disk..."
46 File.delete(dumpfile)
47 return
48 end
49
50 begin
51 puts "Sending data to Amazon S3..."
52 response = AWS::S3::S3Object.store(dumpfile, open(dumpfile), settings.bucket_name)
53 rescue Exception => e
54 puts "Error: " + e.message
55 puts "Deleting backup file from local disk..."
56 File.delete(dumpfile)
57 return
58 end
59 puts "Backup Done."
60 puts ""
61
62end
63
64
65mysql_to_s3(user_settings)