rmybackup 0.1.2 → 0.2.0
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 +20 -9
- data/bin/rmybackup +8 -8
- data/lib/rmybackup/config_file.txt +9 -3
- data/lib/rmybackup.rb +43 -6
- metadata +16 -4
data/Readme.md
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
# RMyBackup
|
2
2
|
|
3
|
-
RMyBackup was created to solve a simple problem I had, and is hopefully useful to somebody else out there. RMyBackup is a quick way to backup up
|
3
|
+
RMyBackup was created to solve a simple problem I had, and is hopefully useful to somebody else out there. RMyBackup is a quick way to backup up your mysql databases using mysqldump. It writes a gzipped .sql file using a date/time naming convention to a specified directory.
|
4
4
|
|
5
5
|
### To Install
|
6
6
|
# gem install rmybackup
|
7
7
|
|
8
8
|
## Usage
|
9
9
|
|
10
|
-
The gem will install an rmybackup binary. RMyBackup will read its configuration from ~/.rmybackup.conf or /etc/rmybackup.conf (a sample configuration file is shown below). The .rmybackup.conf file in your home folder will be used if present, next
|
10
|
+
The gem will install an rmybackup binary. RMyBackup will read its configuration from ~/.rmybackup.conf or /etc/rmybackup.conf (a sample configuration file is shown below). The .rmybackup.conf file in your home folder will be used if present, next rmybackup will look for /etc/rmybackup. You may also specify an alternate config file on the command line using rmybackup --config-file /alternate/config/file. RMyBackup will backup all databases excluding the databases listed in the skip_databases: [] list in the configuration file.
|
11
11
|
|
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
15
|
|
16
|
-
|
16
|
+
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
17
|
|
18
|
-
# example my.cnf
|
18
|
+
# example my.cnf or ~/.my.cnf
|
19
19
|
|
20
20
|
[mysqldump]
|
21
21
|
user = root
|
22
22
|
password = roots_password
|
23
23
|
|
24
24
|
|
25
|
-
Once everything is set up
|
25
|
+
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
26
|
|
27
27
|
# rmybackup
|
28
28
|
|
@@ -31,15 +31,26 @@ Once everything is set up correctly in the config file, and mysqldump is able to
|
|
31
31
|
|
32
32
|
The default location for the configuration file is /etc/rmybackup.conf then ~/.rmybacukp.conf, it's formatted in YAML. You can specify a different config file on the command line using the --config-file (-f) option.
|
33
33
|
|
34
|
+
---
|
34
35
|
backup_dir: /Users/username/mysql_backups/
|
35
|
-
#Number of days to keep backups
|
36
36
|
remove_after: 7
|
37
37
|
|
38
|
+
#Database
|
39
|
+
username: root
|
40
|
+
password: password
|
41
|
+
host: localhost
|
42
|
+
|
43
|
+
#If this is set to true, no --user --password or --host switches will be passed to
|
44
|
+
#mysqldump. You will need to have credentials within /etc/my.cnf or ~/.my.cnf
|
45
|
+
use_mycnf_credentials: false
|
46
|
+
|
38
47
|
#Databases to back up
|
39
|
-
|
48
|
+
skip_databases: [ mysql, test, information_schema ]
|
40
49
|
|
41
50
|
#Command Locations
|
42
|
-
|
43
|
-
|
51
|
+
#You can override where to find the needed system commands, default locations are prefixed with /usr/bin/
|
52
|
+
|
53
|
+
#mysqldump_command: /usr/local/mysql/bin/mysqldump
|
54
|
+
#gzip_command: /usr/bin/gzip
|
44
55
|
|
45
56
|
If mysqldump_command, or gzip_command are left out, they will default to finding the applications in /usr/bin
|
data/bin/rmybackup
CHANGED
@@ -8,22 +8,22 @@ require 'optparse'
|
|
8
8
|
#GLOBALS
|
9
9
|
#Default to local config file if it exists
|
10
10
|
if File.exists?(File.expand_path("~/.rmybackup.conf"))
|
11
|
-
|
11
|
+
options = { :config_file => File.expand_path("~/.rmybackup.conf") }
|
12
12
|
else
|
13
|
-
|
13
|
+
options = { :config_file => "/etc/rmybackup.conf" }
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
gem_version = RMyBackup::GEM_VERSION
|
17
17
|
|
18
18
|
#Process the command line arguments
|
19
19
|
ARGV.options do |opts|
|
20
20
|
#Set the config file
|
21
21
|
opts.on("-f /etc/rmybackup.conf","--config-file /etc/rmybackup.conf","Set Config File",String) do |o|
|
22
|
-
|
22
|
+
options[:config_file] = o
|
23
23
|
end
|
24
24
|
|
25
25
|
#Version
|
26
|
-
opts.on("-v","--version","Outputs version") { puts "Version - #{
|
26
|
+
opts.on("-v","--version","Outputs version") { puts "Version - #{gem_version}"; exit }
|
27
27
|
|
28
28
|
#Allow the user to write the sample config file to either the default (no file specified) or to the file they specify
|
29
29
|
#on the command line
|
@@ -36,10 +36,10 @@ ARGV.options do |opts|
|
|
36
36
|
end
|
37
37
|
|
38
38
|
#If the config file doesn't exist, warn and exit
|
39
|
-
if not File.exists?
|
40
|
-
puts "Unable to read the configuration file - #{
|
39
|
+
if not File.exists? options[:config_file]
|
40
|
+
puts "Unable to read the configuration file - #{options[:config_file]}"
|
41
41
|
exit
|
42
42
|
end
|
43
43
|
|
44
44
|
#Run
|
45
|
-
RMyBackup::Base.new(
|
45
|
+
RMyBackup::Base.new(options[:config_file])
|
@@ -1,10 +1,16 @@
|
|
1
|
+
---
|
1
2
|
backup_dir: /Users/username/mysql_backups/
|
2
3
|
remove_after: 7
|
3
4
|
|
4
|
-
#
|
5
|
-
|
5
|
+
#Database
|
6
|
+
username: root
|
7
|
+
password: password
|
8
|
+
host: localhost
|
9
|
+
|
10
|
+
use_mycnf_credentials: false
|
6
11
|
|
7
|
-
|
12
|
+
#Databases to back up
|
13
|
+
skip_databases: [ mysql, test, information_schema ]
|
8
14
|
|
9
15
|
#Command Locations
|
10
16
|
#You can override where to find the needed system commands, default locations are prefixed with /usr/bin/
|
data/lib/rmybackup.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'time'
|
3
|
+
require 'mysql'
|
4
|
+
|
3
5
|
require File.expand_path('../rmybackup/install_config',__FILE__)
|
4
6
|
require File.expand_path('../rmybackup/purge_files',__FILE__)
|
5
7
|
|
6
8
|
module RMyBackup
|
9
|
+
|
10
|
+
GEM_VERSION = "0.2.0"
|
11
|
+
|
7
12
|
class Base
|
8
13
|
def initialize(config_file)
|
9
14
|
@config_file = config_file
|
@@ -17,18 +22,43 @@ module RMyBackup
|
|
17
22
|
|
18
23
|
#Grab some config variables
|
19
24
|
mysql_dump = @config['mysqldump_command']
|
20
|
-
|
25
|
+
backup_root = @config['backup_dir']
|
21
26
|
gzip = @config['gzip_command']
|
22
27
|
date_string = Time.now.strftime "%m_%d_%Y_%H_%M"
|
23
28
|
|
29
|
+
|
24
30
|
#Cycle through databases to backup
|
25
|
-
|
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 = " --user=#{@config['username']} --password=#{@config['password']} --host=#{@config['host']}"
|
38
|
+
else
|
39
|
+
cred_string = ''
|
40
|
+
end
|
41
|
+
|
26
42
|
puts "Backing up #{db}\n"
|
27
|
-
system "#{mysql_dump} #{db} |#{gzip} > #{backup_dir}/#{db}_#{date_string}.sql.gz"
|
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'])
|
28
47
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
48
|
+
end
|
49
|
+
|
50
|
+
#Get Databases from MySQL
|
51
|
+
def get_databases
|
52
|
+
dbc = Mysql.real_connect(@config['host'],@config['username'],@config['password'])
|
53
|
+
res = dbc.query('SHOW DATABASES;')
|
54
|
+
databases = []
|
55
|
+
res.each_hash do |db|
|
56
|
+
databases << db['Database']
|
57
|
+
end
|
58
|
+
return databases - @config['skip_databases']
|
59
|
+
rescue
|
60
|
+
puts "There was a problem connecting to the mysql server"
|
61
|
+
exit 0
|
32
62
|
end
|
33
63
|
|
34
64
|
#Parse the config YAML file
|
@@ -44,6 +74,13 @@ module RMyBackup
|
|
44
74
|
@config['find_command'] = "/usr/bin/find" if @config['find_command'].nil?
|
45
75
|
@config['remove_after'] = @config['remove_after'] || false
|
46
76
|
|
77
|
+
@config['use_mycnf_credentials'] = @config['use_mycnf_credentials'] ? true : false
|
78
|
+
|
79
|
+
#Database Config
|
80
|
+
@config['username'] = @config['username'] || false
|
81
|
+
@config['password'] = @config['password'] || false
|
82
|
+
@config['host'] = @config['host'] || false
|
83
|
+
|
47
84
|
#Backup dir validation
|
48
85
|
if not File.directory? @config['backup_dir']
|
49
86
|
@error << "No Such Backup Directory #{@config['backup_dir']}"
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 1
|
8
7
|
- 2
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Bryan Shelton
|
@@ -16,8 +16,20 @@ cert_chain: []
|
|
16
16
|
|
17
17
|
date: 2010-05-13 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: mysql
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
21
33
|
description: Ruby mysql backup script, the script uses mysqldump from the system
|
22
34
|
email: bryan@sheltonopensolutions.com
|
23
35
|
executables:
|