rmybackup 0.3.0 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Readme.md +26 -9
- data/bin/rmybackup +31 -7
- data/lib/rmybackup.rb +7 -107
- data/lib/rmybackup/backup.rb +54 -0
- data/lib/rmybackup/base.rb +106 -0
- data/lib/rmybackup/config_file.txt +13 -2
- data/lib/rmybackup/install_config.rb +40 -0
- data/lib/rmybackup/push.rb +23 -0
- metadata +28 -8
data/Readme.md
CHANGED
@@ -12,6 +12,11 @@ The gem will install an rmybackup binary. RMyBackup will read its configuration
|
|
12
12
|
To generate a sample config file, use the --instal-config option. Default location is /etc/rmybackup.conf, or if we can't write to /etc, ~/.rmybacukp.conf.
|
13
13
|
|
14
14
|
# rmybackup --install-config [/config/location]
|
15
|
+
|
16
|
+
Rmybackup --edit and --list will edit and list the config file respectively. Edit will use the EDITOR environment variable, or search for vim.
|
17
|
+
|
18
|
+
# rmybackup --edit
|
19
|
+
# rmybackup --list
|
15
20
|
|
16
21
|
If use_mycnf_credentials is set to true in the config file, mysqldump will not be passed --user, --password, or --host based on the values in the config file. The script will rely on your [mysqldump] configuration in either /etc/my.cnf or the user's ~/.my.cnf. This is more secure if running on a shared server.
|
17
22
|
|
@@ -20,7 +25,11 @@ If use_mycnf_credentials is set to true in the config file, mysqldump will not b
|
|
20
25
|
[mysqldump]
|
21
26
|
user = root
|
22
27
|
password = roots_password
|
23
|
-
|
28
|
+
|
29
|
+
RMyBackup will also use rsync to sync to URIs listed in the push configuration file option. For example, if you set push: user@server:/remote/path, after the backups were completed, rmybackup would run rsync -rz /local/backup/path/ user@server:/remote/path/. Push can either be a list or URIs or a single URI.
|
30
|
+
|
31
|
+
push: [ "username@server:/directory/for/backups",
|
32
|
+
"another_user@another_server:/directory/for/backups" ]
|
24
33
|
|
25
34
|
Once everything is set up, simply run the rmybackup command. It will connect to the mysql server using the values in your config file and back up your databases.
|
26
35
|
|
@@ -33,31 +42,39 @@ The default location for the configuration file is /etc/rmybackup.conf then ~/.r
|
|
33
42
|
|
34
43
|
---
|
35
44
|
backup_dir: /Users/username/mysql_backups/
|
36
|
-
|
45
|
+
|
37
46
|
#Pruning. Remove_after is evaluated first, then only_keep
|
38
47
|
|
39
48
|
#Remove after x days
|
40
|
-
remove_after: 7
|
49
|
+
#remove_after: 7
|
41
50
|
|
42
51
|
#Only keep x number
|
43
|
-
only_keep: 5
|
52
|
+
#only_keep: 5
|
44
53
|
|
45
54
|
#Database
|
46
55
|
username: root
|
47
56
|
password: password
|
48
57
|
host: localhost
|
49
58
|
|
50
|
-
#If
|
51
|
-
#mysqldump. You will need to have credentials within /etc/my.cnf or ~/.my.cnf
|
59
|
+
#If use_mycnf_credentials is set to true, no --user --password or --host switches will be passed to mysqldump
|
52
60
|
use_mycnf_credentials: false
|
53
61
|
|
54
62
|
#Databases to back up
|
55
63
|
skip_databases: [ mysql, test, information_schema ]
|
56
64
|
|
65
|
+
|
66
|
+
#RMyBackup will use Rsync to push to the Rsync compatible URI's listed in push:. This can be a single value or a list.
|
67
|
+
|
68
|
+
#push: [ "username@server:/directory/for/backups",
|
69
|
+
# "another_user@another_server:/directory/for/backups" ]
|
70
|
+
|
71
|
+
|
57
72
|
#Command Locations
|
58
|
-
#You
|
73
|
+
#You may override where to find the needed system commands
|
74
|
+
#RMyBackup will try to locate these files if they are not specified here
|
59
75
|
|
60
76
|
#mysqldump_command: /usr/local/mysql/bin/mysqldump
|
61
77
|
#gzip_command: /usr/bin/gzip
|
62
|
-
|
63
|
-
|
78
|
+
|
79
|
+
#Rsync, only needed if you designate pushes
|
80
|
+
#rsync_command: /usr/bin/rsync
|
data/bin/rmybackup
CHANGED
@@ -5,7 +5,6 @@ require 'rubygems'
|
|
5
5
|
require 'rmybackup'
|
6
6
|
require 'optparse'
|
7
7
|
|
8
|
-
#GLOBALS
|
9
8
|
#Default to local config file if it exists
|
10
9
|
if File.exists?(File.expand_path("~/.rmybackup.conf"))
|
11
10
|
options = { :config_file => File.expand_path("~/.rmybackup.conf") }
|
@@ -13,6 +12,10 @@ else
|
|
13
12
|
options = { :config_file => "/etc/rmybackup.conf" }
|
14
13
|
end
|
15
14
|
|
15
|
+
#Default edit or list options to false
|
16
|
+
options[:edit] = false
|
17
|
+
options[:list] = false
|
18
|
+
|
16
19
|
gem_version = RMyBackup::GEM_VERSION
|
17
20
|
|
18
21
|
#Process the command line arguments
|
@@ -32,14 +35,35 @@ ARGV.options do |opts|
|
|
32
35
|
exit 0
|
33
36
|
end
|
34
37
|
|
38
|
+
opts.on("-l","--list","Lists the configuration file") {
|
39
|
+
#Set the list option to true
|
40
|
+
options[:list] = true
|
41
|
+
}
|
42
|
+
|
43
|
+
opts.on("-e","--edit","Edit the configuration file in vim, or the editor defined by the system variable $EDITOR") {
|
44
|
+
#Set the list option to true
|
45
|
+
options[:edit] = true
|
46
|
+
}
|
47
|
+
|
35
48
|
opts.parse!
|
36
49
|
end
|
37
50
|
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
51
|
+
#The first remaining ARGV, we'll take as a command
|
52
|
+
command = ARGV.shift
|
53
|
+
|
54
|
+
#Load up the config file. This will exit 1 if the config file can't be found
|
55
|
+
RMyBackup::Base.load_config(options[:config_file])
|
56
|
+
|
57
|
+
#Evaluate edit or list options
|
58
|
+
if options[:list]
|
59
|
+
RMyBackup.list_config_file
|
60
|
+
exit 0
|
61
|
+
end
|
62
|
+
|
63
|
+
if options[:edit]
|
64
|
+
RMyBackup.edit_config_file
|
65
|
+
exit 0
|
42
66
|
end
|
43
67
|
|
44
|
-
#Run
|
45
|
-
RMyBackup::
|
68
|
+
#Run the backups
|
69
|
+
RMyBackup::Backup.run
|
data/lib/rmybackup.rb
CHANGED
@@ -2,114 +2,14 @@ require 'yaml'
|
|
2
2
|
require 'time'
|
3
3
|
require 'mysql'
|
4
4
|
|
5
|
+
#Load our libraries
|
5
6
|
require File.expand_path('../rmybackup/install_config',__FILE__)
|
6
7
|
require File.expand_path('../rmybackup/purge_files',__FILE__)
|
8
|
+
require File.expand_path('../rmybackup/base',__FILE__)
|
9
|
+
require File.expand_path('../rmybackup/backup',__FILE__)
|
10
|
+
require File.expand_path('../rmybackup/push',__FILE__)
|
7
11
|
|
12
|
+
#Set the version
|
8
13
|
module RMyBackup
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
class Base
|
13
|
-
def initialize(config_file)
|
14
|
-
@config_file = config_file
|
15
|
-
#if the config file passes, run the backups
|
16
|
-
run_backups if parse_config
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
#Run the backups, we should have proper validation at this point
|
21
|
-
def run_backups
|
22
|
-
|
23
|
-
#Grab some config variables
|
24
|
-
mysql_dump = @config['mysqldump_command']
|
25
|
-
backup_root = @config['backup_dir']
|
26
|
-
gzip = @config['gzip_command']
|
27
|
-
date_string = Time.now.strftime "%m_%d_%Y_%H_%M"
|
28
|
-
|
29
|
-
|
30
|
-
#Cycle through databases to backup
|
31
|
-
get_databases.each do |db|
|
32
|
-
backup_dir = File.expand_path("#{backup_root}/#{db}")
|
33
|
-
Dir.mkdir(backup_dir) if not File.exists?(backup_dir)
|
34
|
-
|
35
|
-
#Decide if we use my.cnf or creds on cli
|
36
|
-
if @config['use_mycnf_credentials']
|
37
|
-
cred_string = ''
|
38
|
-
else
|
39
|
-
cred_string = " --user=#{@config['username']} --password=#{@config['password']} --host=#{@config['host']}"
|
40
|
-
end
|
41
|
-
|
42
|
-
puts "Backing up #{db}\n"
|
43
|
-
system "#{mysql_dump}#{cred_string} #{db} |#{gzip} > #{backup_dir}/#{db}_#{date_string}.sql.gz"
|
44
|
-
|
45
|
-
#Purge after x days
|
46
|
-
RMyBackup.purge_days(backup_dir,@config['remove_after'])
|
47
|
-
RMyBackup.purge_number(backup_dir,@config['only_keep'])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
#Get Databases from MySQL
|
52
|
-
def get_databases
|
53
|
-
dbc = Mysql.real_connect(@config['host'],@config['username'],@config['password'])
|
54
|
-
res = dbc.query('SHOW DATABASES;')
|
55
|
-
databases = []
|
56
|
-
res.each_hash do |db|
|
57
|
-
databases << db['Database']
|
58
|
-
end
|
59
|
-
return databases - @config['skip_databases']
|
60
|
-
rescue
|
61
|
-
puts "There was a problem connecting to the mysql server"
|
62
|
-
exit 0
|
63
|
-
end
|
64
|
-
|
65
|
-
#Parse the config YAML file
|
66
|
-
def parse_config
|
67
|
-
@config = YAML::load(File.open(@config_file))
|
68
|
-
|
69
|
-
#Initialize error array
|
70
|
-
@error = Array.new
|
71
|
-
|
72
|
-
#Defaults
|
73
|
-
@config['gzip_command'] = "/usr/bin/gzip" if @config['gzip_command'].nil?
|
74
|
-
@config['mysqldump_command'] = "/usr/bin/mysqldump" if @config['mysqldump_command'].nil?
|
75
|
-
@config['find_command'] = "/usr/bin/find" if @config['find_command'].nil?
|
76
|
-
@config['remove_after'] = @config['remove_after'] || false
|
77
|
-
@config['only_keep'] = @config['only_keep'] || false
|
78
|
-
|
79
|
-
@config['use_mycnf_credentials'] = @config['use_mycnf_credentials'] ? true : false
|
80
|
-
|
81
|
-
#Database Config
|
82
|
-
@config['username'] = @config['username'] || false
|
83
|
-
@config['password'] = @config['password'] || false
|
84
|
-
@config['host'] = @config['host'] || false
|
85
|
-
|
86
|
-
#Backup dir validation
|
87
|
-
if not File.directory? @config['backup_dir']
|
88
|
-
@error << "No Such Backup Directory #{@config['backup_dir']}"
|
89
|
-
else
|
90
|
-
@config['backup_dir'] = File.expand_path @config['backup_dir']
|
91
|
-
if not File.writable? @config['backup_dir']
|
92
|
-
@error << "Can't write to the backup directory - #{@config['backup_dir']}"
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
#Check Commands
|
97
|
-
@error << "Can't locate find command: #{@config['find_command']}" unless File.exists? @config['find_command']
|
98
|
-
@error << "Can't locate gzip command: #{@config['gzip_command']}" unless File.exists? @config['gzip_command']
|
99
|
-
@error << "Can't locate mysqldump command: #{@config['mysqldump_command']}" unless File.exists? @config['mysqldump_command']
|
100
|
-
|
101
|
-
#See if we've created any errors, if so, display them and exit
|
102
|
-
if @error.empty?
|
103
|
-
return true
|
104
|
-
else
|
105
|
-
@error.each {|e| puts "#{e}\n" }
|
106
|
-
exit 1
|
107
|
-
end
|
108
|
-
#Rescue anything by displaying errors if we have them and exiting 1
|
109
|
-
rescue
|
110
|
-
@error.each {|e| puts "#{e}\n" }
|
111
|
-
exit 1
|
112
|
-
return false
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
14
|
+
GEM_VERSION = "0.3.5"
|
15
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module RMyBackup
|
2
|
+
class Backup
|
3
|
+
def self.run
|
4
|
+
|
5
|
+
#This will exit out if RMyBackup::Base.load_config(file) hasn't been loaded with a config file yet
|
6
|
+
@config = RMyBackup::Base.get_config
|
7
|
+
|
8
|
+
#Grab some config variables
|
9
|
+
mysql_dump = @config['mysqldump_command']
|
10
|
+
backup_root = @config['backup_dir']
|
11
|
+
gzip = @config['gzip_command']
|
12
|
+
date_string = Time.now.strftime "%m_%d_%Y_%H_%M"
|
13
|
+
|
14
|
+
|
15
|
+
#Cycle through databases to backup
|
16
|
+
get_databases.each do |db|
|
17
|
+
backup_dir = File.expand_path("#{backup_root}/#{db}")
|
18
|
+
Dir.mkdir(backup_dir) if not File.exists?(backup_dir)
|
19
|
+
|
20
|
+
#Decide if we use my.cnf or creds on cli
|
21
|
+
if @config['use_mycnf_credentials']
|
22
|
+
cred_string = ''
|
23
|
+
else
|
24
|
+
cred_string = " --user=#{@config['username']} --password=#{@config['password']} --host=#{@config['host']}"
|
25
|
+
end
|
26
|
+
|
27
|
+
puts "Backing up #{db}\n"
|
28
|
+
system "#{mysql_dump}#{cred_string} #{db} |#{gzip} > #{backup_dir}/#{db}_#{date_string}.sql.gz"
|
29
|
+
|
30
|
+
#Purge after x days
|
31
|
+
RMyBackup.purge_days(backup_dir,@config['remove_after'])
|
32
|
+
RMyBackup.purge_number(backup_dir,@config['only_keep'])
|
33
|
+
end
|
34
|
+
|
35
|
+
#If we need to push the dir, push it here
|
36
|
+
RMyBackup::Push.run if @config['push']
|
37
|
+
end
|
38
|
+
|
39
|
+
#Get Databases from MySQL
|
40
|
+
def self.get_databases
|
41
|
+
dbc = Mysql.real_connect(@config['host'],@config['username'],@config['password'])
|
42
|
+
res = dbc.query('SHOW DATABASES;')
|
43
|
+
databases = []
|
44
|
+
res.each_hash do |db|
|
45
|
+
databases << db['Database']
|
46
|
+
end
|
47
|
+
return databases - @config['skip_databases']
|
48
|
+
rescue
|
49
|
+
puts "There was a problem connecting to the mysql server"
|
50
|
+
exit 0
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module RMyBackup
|
2
|
+
class Base
|
3
|
+
class << self
|
4
|
+
#Load the configuration from the file
|
5
|
+
def load_config(file)
|
6
|
+
|
7
|
+
#Expand the file path
|
8
|
+
file = File.expand_path(file)
|
9
|
+
|
10
|
+
if not File.exists? file
|
11
|
+
puts "Can't load config file: #{file}"
|
12
|
+
exit 1
|
13
|
+
end
|
14
|
+
|
15
|
+
#Load the YAML file
|
16
|
+
@config = YAML::load(File.open(file))
|
17
|
+
|
18
|
+
#Cache the expanded file we read
|
19
|
+
@config['file'] = file
|
20
|
+
|
21
|
+
#Initialize error array
|
22
|
+
@error = Array.new
|
23
|
+
|
24
|
+
#Command locations
|
25
|
+
if @config['gzip_command'].nil?
|
26
|
+
@config['gzip_command'] = `which gzip`.chop
|
27
|
+
end
|
28
|
+
|
29
|
+
if @config['mysqldump_command'].nil?
|
30
|
+
@config['mysqldump_command'] = `which mysqldump`.chop
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#Sanitize and check our PUSH options
|
35
|
+
if not @config['push'].nil?
|
36
|
+
#Turn this into an array, even if there is only one in the config file
|
37
|
+
@config['push'] = Array.new << @config['push'] if not @config['push'].kind_of? Array
|
38
|
+
|
39
|
+
#Because we have a push defined, lets find the rsync command
|
40
|
+
if @config['rsync_command'].nil?
|
41
|
+
@config['rsync_command'] = `which rsync`.chop
|
42
|
+
end
|
43
|
+
|
44
|
+
@error << "Can't locate rsync command: #{@config['rsync_command']}" unless File.exists? @config['rsync_command']
|
45
|
+
else
|
46
|
+
@config['push'] = false
|
47
|
+
end
|
48
|
+
|
49
|
+
#Check that commands exist
|
50
|
+
@error << "Can't locate gzip command: #{@config['gzip_command']}" unless File.exists? @config['gzip_command']
|
51
|
+
@error << "Can't locate mysqldump command: #{@config['mysqldump_command']}" unless File.exists? @config['mysqldump_command']
|
52
|
+
|
53
|
+
|
54
|
+
#Default the purge settings
|
55
|
+
@config['remove_after'] = @config['remove_after'] || false
|
56
|
+
@config['only_keep'] = @config['only_keep'] || false
|
57
|
+
|
58
|
+
|
59
|
+
#Default .my.cnf usage
|
60
|
+
@config['use_mycnf_credentials'] = @config['use_mycnf_credentials'] ? true : false
|
61
|
+
|
62
|
+
#Database Config
|
63
|
+
@config['username'] = @config['username'] || false
|
64
|
+
@config['password'] = @config['password'] || false
|
65
|
+
@config['host'] = @config['host'] || false
|
66
|
+
|
67
|
+
|
68
|
+
#Backup dir validation
|
69
|
+
@config['backup_dir'] = File.expand_path @config['backup_dir']
|
70
|
+
|
71
|
+
if not File.directory? @config['backup_dir']
|
72
|
+
@error << "No Such Backup Directory #{@config['backup_dir']}"
|
73
|
+
else
|
74
|
+
if not File.writable? @config['backup_dir']
|
75
|
+
@error << "Can't write to the backup directory - #{@config['backup_dir']}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#See if we've created any errors, if so, display them and exit
|
80
|
+
if @error.empty?
|
81
|
+
return true
|
82
|
+
else
|
83
|
+
@error.each {|e| puts "#{e}\n" }
|
84
|
+
exit 1
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def config_set?
|
90
|
+
return true if @config
|
91
|
+
false
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_config
|
95
|
+
|
96
|
+
#Check to make sure the configuration file has already been loaded
|
97
|
+
if not @config
|
98
|
+
puts 'No config file has been loaded.'
|
99
|
+
exit
|
100
|
+
end
|
101
|
+
|
102
|
+
@config
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -14,13 +14,24 @@ username: root
|
|
14
14
|
password: password
|
15
15
|
host: localhost
|
16
16
|
|
17
|
+
#If use_mycnf_credentials is set to true, no --user --password or --host switches will be passed to mysqldump
|
17
18
|
use_mycnf_credentials: false
|
18
19
|
|
19
20
|
#Databases to back up
|
20
21
|
skip_databases: [ mysql, test, information_schema ]
|
21
22
|
|
23
|
+
|
24
|
+
#RMyBackup will use Rsync to push to the Rsync compatible URI's listed in push:. This can be a single value or a list.
|
25
|
+
|
26
|
+
#push: [ "username@server:/directory/for/backups", "another_user@another_server:/directory/for/backups" ]
|
27
|
+
|
28
|
+
|
22
29
|
#Command Locations
|
23
|
-
#You
|
30
|
+
#You may override where to find the needed system commands
|
31
|
+
#RMyBackup will locate these files if they are not specified here
|
24
32
|
|
25
33
|
#mysqldump_command: /usr/local/mysql/bin/mysqldump
|
26
|
-
#gzip_command: /usr/bin/gzip
|
34
|
+
#gzip_command: /usr/bin/gzip
|
35
|
+
|
36
|
+
#Rsync, only needed if you designate pushes
|
37
|
+
#rsync_command: /usr/bin/rsync
|
@@ -31,4 +31,44 @@ module RMyBackup
|
|
31
31
|
end
|
32
32
|
exit 0
|
33
33
|
end
|
34
|
+
|
35
|
+
#Edit config Options
|
36
|
+
def self.editor
|
37
|
+
if ENV['EDITOR'].nil?
|
38
|
+
vim = `which vim`.chop
|
39
|
+
if vim.empty?
|
40
|
+
return false
|
41
|
+
else
|
42
|
+
return vim
|
43
|
+
end
|
44
|
+
else
|
45
|
+
return ENV['EDITOR']
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.list_config_file
|
50
|
+
if editor
|
51
|
+
config = RMyBackup::Base.get_config
|
52
|
+
file = config['file']
|
53
|
+
puts "Showing config file - #{file}:\n"
|
54
|
+
File.open(file, "r") do |infile|
|
55
|
+
while(line = infile.gets)
|
56
|
+
puts line
|
57
|
+
end
|
58
|
+
end
|
59
|
+
else
|
60
|
+
puts "Can't locate vim and $EDITOR isn't set"
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.edit_config_file
|
66
|
+
config = RMyBackup::Base.get_config
|
67
|
+
if editor
|
68
|
+
exec "#{editor} #{config['file']}"
|
69
|
+
else
|
70
|
+
puts "Can't locate vim and $EDITOR isn't set"
|
71
|
+
exit 1
|
72
|
+
end
|
73
|
+
end
|
34
74
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RMyBackup
|
2
|
+
class Push
|
3
|
+
class << self
|
4
|
+
def run
|
5
|
+
#Load the config options
|
6
|
+
@config = RMyBackup::Base.get_config
|
7
|
+
|
8
|
+
#Iterrate through the pushes in the @config options
|
9
|
+
@config['push'].each do |push|
|
10
|
+
#Define the rsync_command from the @config option
|
11
|
+
rsync_command = @config['rsync_command']
|
12
|
+
|
13
|
+
#Add a trailing slash if not present
|
14
|
+
push += "/" if push[-1,1] != "/"
|
15
|
+
|
16
|
+
puts "\nPushing to : #{push} -->\n\n"
|
17
|
+
system "#{rsync_command} -rz --delete #{@config['backup_dir']}/ #{push}"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 5
|
9
|
+
version: 0.3.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Bryan Shelton
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-13 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -30,6 +30,19 @@ dependencies:
|
|
30
30
|
version: "0"
|
31
31
|
type: :runtime
|
32
32
|
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rspec
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
33
46
|
description: Ruby mysql backup script, the script uses mysqldump from the system
|
34
47
|
email: bryan@sheltonopensolutions.com
|
35
48
|
executables:
|
@@ -39,11 +52,14 @@ extensions: []
|
|
39
52
|
extra_rdoc_files: []
|
40
53
|
|
41
54
|
files:
|
42
|
-
- lib/rmybackup.rb
|
43
55
|
- Readme.md
|
56
|
+
- lib/rmybackup/backup.rb
|
57
|
+
- lib/rmybackup/base.rb
|
44
58
|
- lib/rmybackup/config_file.txt
|
45
59
|
- lib/rmybackup/install_config.rb
|
46
60
|
- lib/rmybackup/purge_files.rb
|
61
|
+
- lib/rmybackup/push.rb
|
62
|
+
- lib/rmybackup.rb
|
47
63
|
- bin/rmybackup
|
48
64
|
has_rdoc: true
|
49
65
|
homepage: http://github.com/bshelton229/rmybackup/
|
@@ -60,16 +76,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
76
|
- - ">="
|
61
77
|
- !ruby/object:Gem::Version
|
62
78
|
segments:
|
63
|
-
-
|
64
|
-
|
79
|
+
- 1
|
80
|
+
- 8
|
81
|
+
- 7
|
82
|
+
version: 1.8.7
|
65
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
84
|
none: false
|
67
85
|
requirements:
|
68
86
|
- - ">="
|
69
87
|
- !ruby/object:Gem::Version
|
70
88
|
segments:
|
71
|
-
-
|
72
|
-
|
89
|
+
- 1
|
90
|
+
- 3
|
91
|
+
- 6
|
92
|
+
version: 1.3.6
|
73
93
|
requirements: []
|
74
94
|
|
75
95
|
rubyforge_project:
|