rubypond-s3backup-manager 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/s3backup +5 -1
- data/bin/s3restore +9 -1
- data/lib/adapters/postgres_adapter.rb +15 -7
- data/lib/models/database_backup.rb +7 -4
- data/lib/models/file_backup.rb +6 -6
- data/lib/s3backup-manager.rb +1 -0
- metadata +1 -1
data/bin/s3backup
CHANGED
data/bin/s3restore
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'optparse'
|
3
|
-
|
3
|
+
begin
|
4
|
+
require 's3backup-manager'
|
5
|
+
rescue LoadError
|
6
|
+
require "#{File.dirname(__FILE__)}/../lib/s3backup-manager"
|
7
|
+
end
|
4
8
|
|
5
9
|
options = {}
|
6
10
|
optparse = OptionParser.new do|opts|
|
@@ -32,6 +36,10 @@ optparse = OptionParser.new do|opts|
|
|
32
36
|
options[:type] = t.downcase
|
33
37
|
options[:type_provided] = true
|
34
38
|
end
|
39
|
+
|
40
|
+
opts.on('--username USER', 'User to connect to the database as' ) do |u|
|
41
|
+
options[:username] = u
|
42
|
+
end
|
35
43
|
|
36
44
|
opts.on('-h', '--help', 'Display this screen') do
|
37
45
|
puts opts
|
@@ -1,17 +1,25 @@
|
|
1
1
|
module S3BackupManager
|
2
2
|
module PostgresAdapter
|
3
3
|
|
4
|
-
def dump_database_to_file(
|
5
|
-
|
6
|
-
|
7
|
-
system "sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
|
4
|
+
def dump_database_to_file(username, database, directory)
|
5
|
+
directory = "#{directory}/s3postgresbackup/#{database}"
|
6
|
+
FileUtils.mkdir_p(directory)
|
7
|
+
system "cd #{directory} && sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
|
8
8
|
exit(1) unless $?.success?
|
9
|
-
|
9
|
+
dump_file = "#{directory}/#{database}.pgsql"
|
10
|
+
system "cd #{directory} && sudo -u #{username} pg_dump --blobs --format=t #{database} > #{dump_file}"
|
10
11
|
exit(1) unless $?.success?
|
12
|
+
user_file = "#{directory}/globals.pgsql"
|
13
|
+
system "cd #{directory} && sudo -u #{username} pg_dumpall -v -f #{user_file} --globals-only >/dev/null 2>&1"
|
14
|
+
exit(1) unless $?.success?
|
15
|
+
[directory]
|
11
16
|
end
|
12
17
|
|
13
|
-
def restore_database_from_file(database, filename)
|
14
|
-
`
|
18
|
+
def restore_database_from_file(username, database, filename)
|
19
|
+
# `psql -h localhost -d postgres -U postgres -f "/path/to/useraccts.sql" `
|
20
|
+
# exit(1) unless $?.success?
|
21
|
+
`sudo -u #{username} pg_restore --format=t -d #{database} #{filename}`
|
22
|
+
exit(1) unless $?.success?
|
15
23
|
end
|
16
24
|
|
17
25
|
private
|
@@ -19,16 +19,19 @@ module S3BackupManager
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def backup(database)
|
22
|
-
|
23
|
-
dump_database_to_file(
|
24
|
-
super(
|
22
|
+
directory = "/tmp/#{database}"
|
23
|
+
files = dump_database_to_file(@options[:username], database, directory)
|
24
|
+
super(files, "databases/#{@options[:adapter]}")
|
25
|
+
files.each do |file|
|
26
|
+
FileUtils.rm_r(file)
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
def restore(database, timestamp)
|
28
31
|
filename = "#{@options[:adapter]}/#{timestamp}/#{database}"
|
29
32
|
@dumped_filename = "/tmp/#{random_string}"
|
30
33
|
super(filename, timestamp, @dumped_filename, "databases")
|
31
|
-
restore_database_from_file(@
|
34
|
+
restore_database_from_file(@options[:username], database, "#{@dumped_filename}/tmp/#{database}")
|
32
35
|
db_cleanup!
|
33
36
|
end
|
34
37
|
|
data/lib/models/file_backup.rb
CHANGED
@@ -15,9 +15,9 @@ module S3BackupManager
|
|
15
15
|
bucket.files.select{|f| f.key.match(%r{^filesystem/})}
|
16
16
|
end
|
17
17
|
|
18
|
-
def backup(
|
19
|
-
stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(
|
20
|
-
encrypted_file = encrypt(pack(
|
18
|
+
def backup(files, directory = "filesystem")
|
19
|
+
stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(files.first)}"
|
20
|
+
encrypted_file = encrypt(pack(files))
|
21
21
|
bucket.store("#{directory}/#{stored_file_name}", open(encrypted_file))
|
22
22
|
cleanup!
|
23
23
|
end
|
@@ -83,10 +83,10 @@ module S3BackupManager
|
|
83
83
|
@decrypted_filename
|
84
84
|
end
|
85
85
|
|
86
|
-
def pack(
|
87
|
-
@packed_filename = "#{random_string}_#{File.basename(
|
86
|
+
def pack(files)
|
87
|
+
@packed_filename = "#{random_string}_#{File.basename(files.first)}.tgz"
|
88
88
|
tgz = Zlib::GzipWriter.new(File.open(@packed_filename, 'wb'))
|
89
|
-
Archive::Tar::Minitar.pack(
|
89
|
+
Archive::Tar::Minitar.pack(files, tgz, recurse_directories = true)
|
90
90
|
@packed_filename
|
91
91
|
end
|
92
92
|
|
data/lib/s3backup-manager.rb
CHANGED