mys3ql 0.0.1 → 0.0.2

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.
@@ -0,0 +1,3 @@
1
+ # Changelog
2
+
3
+ [awaiting v1.0.0]
data/README.md CHANGED
@@ -9,11 +9,17 @@ Install and configure as below.
9
9
 
10
10
  To perform a full backup:
11
11
 
12
- $ mys3ql full
12
+ $ mys3ql -f
13
+ $ mys3ql --full
13
14
 
14
15
  If you are using MySql's binary logging (see below), back up the binary logs like this:
15
16
 
16
- $ mys3ql incremental
17
+ $ mys3ql -i
18
+ $ mys3ql --incremental
19
+
20
+ By default mys3ql looks for a configuration file at ~/.mys3ql. You can override this like so:
21
+
22
+ $ mys3ql -f --config=FILE
17
23
 
18
24
 
19
25
  ## Installation
@@ -21,14 +27,14 @@ If you are using MySql's binary logging (see below), back up the binary logs lik
21
27
  First install the gem:
22
28
 
23
29
  $ gem install mys3ql
24
-
25
- Second, create your `~/.mys3ql` config file:
30
+
31
+ Second, create your config file:
26
32
 
27
33
  mysql:
28
34
  # Database to back up
29
35
  database: aircms_production
30
36
  # MySql credentials
31
- user: root
37
+ user:
32
38
  password:
33
39
  # Path (with trailing slash) to mysql commands e.g. mysqldump
34
40
  bin_path: /usr/local/mysql/bin/
@@ -44,6 +50,7 @@ Second, create your `~/.mys3ql` config file:
44
50
  # Bucket in which to store your backups
45
51
  bucket: db_backups
46
52
 
53
+ If you only have one database to back up on your server, you can put the config file at `~/.mys3ql`. Otherwise, tell the `mys3ql` command where the config file is with the `--config=FILE` switch.
47
54
 
48
55
  ## Binary logging
49
56
 
@@ -67,4 +74,15 @@ Marc-André Cournoyer's [mysql_s3_backup](https://github.com/macournoyer/mysql_s
67
74
  - tests ;)
68
75
  - restore (pull latest dump, pull bin files, pipe dump into mysql, pipe binfiles into mysql)
69
76
  - remove old dump files (s3)
70
- - fix verbosity/debugging flag
77
+
78
+
79
+ ## Questions, Problems, Feedback
80
+
81
+ Please use the GitHub [issue tracker](https://github.com/airblade/mys3ql/issues) or email me.
82
+
83
+
84
+ ## Intellectual property
85
+
86
+ Copyright 2011 Andy Stewart (boss@airbladesoftware.com).
87
+
88
+ Released under the MIT licence.
data/bin/mys3ql CHANGED
@@ -1,8 +1,63 @@
1
1
  #!/usr/bin/env ruby-local-exec
2
2
 
3
+ # Hmm, is there a better way which doesn't force rubygems?
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+
3
7
  lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
4
8
  $LOAD_PATH.unshift lib_dir if File.directory?(lib_dir)
5
9
 
6
10
  require 'mys3ql'
11
+ require 'choice'
12
+
13
+ Choice.options do
14
+
15
+ header ''
16
+ header 'Specific options:'
17
+
18
+ option :full do
19
+ short '-f'
20
+ long '--full'
21
+ desc 'Dump database, push to S3, and clean up bin logs on S3'
22
+ end
23
+
24
+ option :incremental do
25
+ short '-i'
26
+ long '--incremental'
27
+ desc "Push mysql's bin logs to S3"
28
+ end
29
+
30
+ option :config do
31
+ short '-c'
32
+ long '--config=FILE'
33
+ desc 'Load configuration from YAML file (default: ~/.mys3ql)'
34
+ default '~/.mys3ql'
35
+ end
36
+
37
+ separator ''
38
+ separator 'General options:'
39
+
40
+ option :debug do
41
+ short '-d'
42
+ long '--debug'
43
+ desc 'Turn on debugging mode'
44
+ end
45
+
46
+ option :help do
47
+ long '--help'
48
+ desc 'Show this message'
49
+ end
50
+
51
+ option :version do
52
+ short '-v'
53
+ long '--version'
54
+ desc 'Show version'
55
+ action do
56
+ puts "mys3ql v#{Mys3ql::VERSION}"
57
+ exit
58
+ end
59
+ end
60
+
61
+ end
7
62
 
8
- Mys3ql::Conductor.run ARGV
63
+ Mys3ql::Conductor.run Choice.choices
@@ -5,26 +5,25 @@ require 'mys3ql/s3'
5
5
  module Mys3ql
6
6
  class Conductor
7
7
 
8
- def self.run(args)
9
- abort usage unless args.length == 1 && %w[ full inc ].include?(args.first)
10
- conductor = Conductor.new
8
+ def self.run(options)
9
+ conductor = Conductor.new(options['config'])
10
+ conductor.debug = options[:debug]
11
11
 
12
- command = args.first
13
- if command == 'full'
12
+ if options['full']
14
13
  conductor.full
15
- else
14
+ elsif options['incremental']
16
15
  conductor.incremental
17
16
  end
18
17
  end
19
18
 
20
- def initialize
21
- @config = Config.new
19
+ def initialize(config_file = nil)
20
+ @config = Config.new(config_file)
22
21
  @mysql = Mysql.new @config
23
22
  @s3 = S3.new @config
24
23
  end
25
24
 
26
25
  def full
27
- @mysql.dump
26
+ @mysql.dump
28
27
  @s3.push_dump_to_s3 @mysql.dump_file
29
28
  @mysql.clean_up_dump
30
29
  @s3.delete_bin_logs_on_s3
@@ -34,13 +33,8 @@ module Mys3ql
34
33
  @s3.push_bin_logs_to_s3
35
34
  end
36
35
 
37
- def self.usage
38
- <<END
39
- usage:
40
- mys3ql full - full backup, push to S3
41
- mys3ql incremental - push bin logs to S3
42
- END
36
+ def debug=(val)
37
+ @config.debug = val
43
38
  end
44
-
45
39
  end
46
40
  end
@@ -3,13 +3,26 @@ require 'yaml'
3
3
  module Mys3ql
4
4
  class Config
5
5
 
6
- def initialize
7
- @config = YAML.load_file config_file
6
+ def initialize(config_file = nil)
7
+ config_file = config_file || default_config_file
8
+ @config = YAML.load_file File.expand_path(config_file)
8
9
  rescue Errno::ENOENT
9
- $stderr.puts "missing ~/.mys3ql config file"
10
+ $stderr.puts "missing config file #{config_file}"
10
11
  exit 1
11
12
  end
12
13
 
14
+ #
15
+ # General
16
+ #
17
+
18
+ def debug=(val)
19
+ @debug = val
20
+ end
21
+
22
+ def debugging?
23
+ @debug
24
+ end
25
+
13
26
  #
14
27
  # MySQL
15
28
  #
@@ -60,7 +73,7 @@ module Mys3ql
60
73
  @config['s3']
61
74
  end
62
75
 
63
- def config_file
76
+ def default_config_file
64
77
  File.join "#{ENV['HOME']}", '.mys3ql'
65
78
  end
66
79
  end
@@ -19,7 +19,7 @@ module Mys3ql
19
19
 
20
20
  def clean_up_dump
21
21
  File.delete dump_file
22
- debug "deleted #{dump_file}"
22
+ log "deleted #{dump_file}"
23
23
  end
24
24
 
25
25
  def dump_file
@@ -15,7 +15,7 @@ module Mys3ql
15
15
  s3_file = push_to_s3 dump_file, key
16
16
  if s3_file
17
17
  s3_file.copy @config.bucket, copy_key
18
- debug "copied #{key} to #{copy_key}"
18
+ log "copied #{key} to #{copy_key}"
19
19
  end
20
20
  end
21
21
 
@@ -32,7 +32,7 @@ module Mys3ql
32
32
  def delete_bin_logs_on_s3
33
33
  bucket.files.all(:prefix => "#{bin_logs_prefix}").each do |file|
34
34
  file.destroy
35
- debug "destroyed #{file.key}"
35
+ log "destroyed #{file.key}"
36
36
  end
37
37
  end
38
38
 
@@ -45,7 +45,7 @@ module Mys3ql
45
45
  :aws_secret_access_key => @config.secret_access_key,
46
46
  :aws_access_key_id => @config.access_key_id
47
47
  )
48
- debug 'connected to s3'
48
+ log 'connected to s3'
49
49
  s
50
50
  end
51
51
  end
@@ -53,7 +53,7 @@ module Mys3ql
53
53
  def bucket
54
54
  @directory ||= begin
55
55
  d = s3.directories.get @config.bucket # assume bucket exists
56
- debug "opened bucket #{@config.bucket}"
56
+ log "opened bucket #{@config.bucket}"
57
57
  d
58
58
  end
59
59
  end
@@ -66,7 +66,7 @@ module Mys3ql
66
66
  :body => File.open(local_file_name),
67
67
  :public => false
68
68
  )
69
- debug "pushed #{local_file_name} to #{s3_key}"
69
+ log "pushed #{local_file_name} to #{s3_key}"
70
70
  s3_file
71
71
  end
72
72
  end
@@ -11,11 +11,7 @@ module Mys3ql
11
11
  end
12
12
 
13
13
  def log(message)
14
- puts message if debugging?
15
- end
16
-
17
- def debugging?
18
- true
14
+ puts message if @config.debugging?
19
15
  end
20
16
 
21
17
  end
@@ -1,3 +1,3 @@
1
1
  module Mys3ql
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
+ s.add_dependency 'choice', '~> 0.1.4'
21
22
  s.add_dependency 'fog', '~> 1.0.0'
22
23
  s.add_development_dependency 'rake'
23
24
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mys3ql
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andy Stewart
@@ -15,13 +15,29 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-26 00:00:00 +02:00
18
+ date: 2011-10-31 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: choice
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 19
30
+ segments:
31
+ - 0
32
+ - 1
33
+ - 4
34
+ version: 0.1.4
35
+ type: :runtime
36
+ version_requirements: *id001
21
37
  - !ruby/object:Gem::Dependency
22
38
  name: fog
23
39
  prerelease: false
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
25
41
  none: false
26
42
  requirements:
27
43
  - - ~>
@@ -33,11 +49,11 @@ dependencies:
33
49
  - 0
34
50
  version: 1.0.0
35
51
  type: :runtime
36
- requirement: *id001
52
+ version_requirements: *id002
37
53
  - !ruby/object:Gem::Dependency
38
54
  name: rake
39
55
  prerelease: false
40
- version_requirements: &id002 !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
41
57
  none: false
42
58
  requirements:
43
59
  - - ">="
@@ -47,7 +63,7 @@ dependencies:
47
63
  - 0
48
64
  version: "0"
49
65
  type: :development
50
- requirement: *id002
66
+ version_requirements: *id003
51
67
  description: Simple backup of your MySql database onto Amazon S3.
52
68
  email:
53
69
  - boss@airbladesoftware.com
@@ -59,6 +75,7 @@ extra_rdoc_files: []
59
75
 
60
76
  files:
61
77
  - .gitignore
78
+ - CHANGELOG.md
62
79
  - Gemfile
63
80
  - README.md
64
81
  - Rakefile