dumpr 1.2 → 1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 1c4e092e069d3b3a1a9ddb44c6e4fae4b405c49510fce4e89ef1577bed0a6016
4
- data.tar.gz: ea58fb39085ea624683a026f3fce5ddabe4cdbf2f1a3c8c5d69621067cc3bb01
2
+ SHA1:
3
+ metadata.gz: 333617934d6bd6652bd3a67d8f5afdea20ab75d7
4
+ data.tar.gz: e738de1c4d150aba044599ac8842a33629df99c8
5
5
  SHA512:
6
- metadata.gz: 53283e55f775af19059ee12c578e05012a5c141409e9484b562884bd80eb1b8ddfb34677753a3e6d37194367c12e3e904c9f712b2d57b5e93a602701a3a9cba5
7
- data.tar.gz: 31d4147d81e4cede85aa7d70fef0707a00491415262487cfc9d9df5403ba56eb1cec02d92340ed458cbcfa4fc47c0627aa32dd9a68a2a13519ea9193c9fcbf92
6
+ metadata.gz: bb48d7a57b4424ebea2cedbf0b0d16995253e5c7d89df6bc555284a39befc58db0cc6ccdae4a9e8b2b7d77183e6a7ded49890448009aca281ef29ef28206d98e
7
+ data.tar.gz: fd08f9a6c8c81fc9d381cee212c3c73d0c04522ed77368ba057f6739d6c85704fce434819918dd1c959daaa8a847a07777d35ae6e0c5fbffcd4accbfa38044cd
data/README.md CHANGED
@@ -10,7 +10,7 @@ Executables installed:
10
10
  * dumpr
11
11
 
12
12
  ### Dependencies
13
- * [Ruby ≥ 1.8.7](http://www.ruby-lang.org/en/downloads/)
13
+ * [Ruby ≥ 2.2.1](http://www.ruby-lang.org/en/downloads/)
14
14
 
15
15
  **SSH access is assumed to be automated with .ssh/config entries**
16
16
 
@@ -39,7 +39,7 @@ Generate yourdb.sql.gz and transfer it to server2
39
39
 
40
40
  Then, over on dbserver2, import your dump file
41
41
  ```sh
42
- dumpr -i --user user --password pw --file /data/dumps/yourdb.sql
42
+ dumpr-import --user user --password pw --file /data/dumps/yourdb.sql
43
43
  ```
44
44
 
45
45
  ## Ruby API
@@ -75,12 +75,21 @@ See *Dumpr::Driver*
75
75
 
76
76
  ## CHANGELOG
77
77
 
78
- * Version 1.0
78
+ ### Version 1.3
79
+ * Split binary, new command `dumpr-import` to replace `dumpr --import`
80
+ * Postgres support (beta)
79
81
 
80
- ## TODO
82
+ ### Version 1.2
83
+ * Changed gem and binary command from `dumper` to `dumpr`
84
+
85
+ ### Version 1.1
86
+ * Tweaks
81
87
 
82
- * Dumpr::Driver::Postgres
83
- * automate importing after an export (socket communication exporter/importer, or just some dumb lockfile checking / polling)
88
+ ### Version 1.0
89
+ * Initial release
90
+
91
+ ## TODO
92
+ * automate importing after an export (socket communication exporter/importer, or just lockfile checking / polling)
84
93
  * security: stop logging passwords
85
- * daemonize
94
+ * daemonize, maybe?
86
95
  * SSH parameters
data/bin/dumpr CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
3
  require 'dumpr/cli'
4
- Dumpr::CLI.execute(ARGV)
4
+ Dumpr::CLI.dump(ARGV)
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'dumpr/cli'
4
+ Dumpr::CLI.import(ARGV)
@@ -8,9 +8,9 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["James Dickson"]
10
10
  s.email = ["jdickson@bcap.com"]
11
- s.homepage = "http://github.com/sixjameses/dumpr"
12
- s.summary = "Dump and load databases."
13
- s.description = "Dumpr provides an easy way to dump and import databases."
11
+ s.homepage = "http://github.com/jamesdickson6/dumpr"
12
+ s.summary = "Dump and import databases."
13
+ s.description = "Dumpr provides an easy way to dump and import databases. Supported databases include MySQL and Postgres."
14
14
  s.files = `git ls-files -z`.split("\x0")
15
15
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
16
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -7,7 +7,7 @@ module Dumpr
7
7
  PROG_NAME = File.basename($0)
8
8
 
9
9
 
10
- def self.execute(args)
10
+ def self.dump(args)
11
11
  # default options
12
12
  options = {}
13
13
  options[:dumpdir] = Dir.pwd
@@ -20,28 +20,20 @@ module Dumpr
20
20
  opts.banner = <<-ENDSTR
21
21
  Usage: #{PROG_NAME} [options]
22
22
 
23
- Exporting:
23
+ Example:
24
24
 
25
25
  #{PROG_NAME} --user root --password yourpass --db yourdb --file yourdb.sql --destination server2:/data/backups
26
26
 
27
- Importing:
28
-
29
- #{PROG_NAME} -i --user root --password yourpass --db yourdb --file /data/backups/yourdb.sql
30
-
31
- Don't forget to set up your .ssh/config so you won't be prompted for ssh passwords for file transfers
27
+ If using remote server destinations, don't forget to set up your .ssh/config so you won't be prompted for ssh passwords for file transfers.
32
28
 
33
29
  Options:
34
30
 
35
31
  ENDSTR
36
32
 
37
- opts.on("-t", "--type [TYPE]", "Database type. (mysql is the default) ") do |val|
33
+ opts.on("-t", "--type TYPE", "Database type: mysql or postgres. Default is mysql.") do |val|
38
34
  options[:driver] = val
39
35
  end
40
36
 
41
- opts.on("-i", "--import", "Import dump file. Default behavior is to dump and export to --destination") do |val|
42
- options[:import] = val
43
- end
44
-
45
37
  opts.on("--all-databases", "dump/import ALL databases") do |val|
46
38
  options[:all_databases] = val
47
39
  end
@@ -51,11 +43,11 @@ ENDSTR
51
43
  end
52
44
 
53
45
  # TODO: Add support to Driver for this
54
- opts.on("--databases [x,y,z]", Array, "dump/import multiple databases") do |val|
46
+ opts.on("--databases x,y,z", Array, "dump/import multiple databases") do |val|
55
47
  options[:databases] = val
56
48
  end
57
49
 
58
- opts.on("--tables [t1,t2,t3]", Array, "dump certain tables, to be used on conjuction with a single --database") do |val|
50
+ opts.on("--tables z,y,z", Array, "dump certain tables, to be used on conjuction with a single --database") do |val|
59
51
  options[:tables] = val
60
52
  end
61
53
 
@@ -87,7 +79,7 @@ ENDSTR
87
79
  options[:destination] = val
88
80
  end
89
81
 
90
- opts.on("--dumpdir", "Default directory for dumpfiles. Default is working directory") do |val|
82
+ opts.on("--dumpdir DIRECTORY", "Default directory for dumpfiles. Default is working directory") do |val|
91
83
  options[:dumpdir] = val
92
84
  end
93
85
 
@@ -103,7 +95,7 @@ ENDSTR
103
95
  options[:gzip_options] = val
104
96
  end
105
97
 
106
- opts.on("--log-file [LOGFILE]", "Log file. Default is stdout.") do |val|
98
+ opts.on("--log-file LOGFILE", "Log file. Default is stdout.") do |val|
107
99
  options[:log_file] = val
108
100
  end
109
101
 
@@ -133,11 +125,148 @@ ENDSTR
133
125
 
134
126
  # do it
135
127
  begin
136
- if options[:import]
137
- Dumpr.import(options[:driver], options)
138
- else
139
- Dumpr.export(options[:driver], options)
128
+ Dumpr.export(options[:driver], options)
129
+ rescue Dumpr::MissingDriver => e
130
+ puts "#{e.message}."
131
+ exit 1
132
+ rescue Dumpr::BadConfig => e
133
+ puts "bad arguments: #{e.message}.\n See --help"
134
+ exit 1
135
+ rescue Dumpr::DumpFileExists => e
136
+ puts "#{e.message}\nIt looks like this dump exists already. You should move it, or use --force to trash it"
137
+ exit 1
138
+ rescue Dumpr::BusyDumping => e
139
+ puts "#{e.message}\n See --help"
140
+ exit 1
141
+ rescue Dumpr::CommandFailure => e
142
+ puts e.message
143
+ exit 1
144
+ end
145
+
146
+ exit 0
147
+
148
+ end
149
+
150
+
151
+ def self.import(args)
152
+ # default options
153
+ options = {}
154
+ options[:dumpdir] = Dir.pwd
155
+ options[:driver] = :mysql
156
+ options[:gzip] = true
157
+
158
+
159
+ op = OptionParser.new do |opts|
160
+
161
+ opts.banner = <<-ENDSTR
162
+ Usage: #{PROG_NAME} [options]
163
+
164
+ Example:
165
+
166
+ #{PROG_NAME} -i --user root --password yourpass --db yourdb --file /data/backups/yourdb.sql
167
+
168
+ If using remote server destinations, don't forget to set up your .ssh/config so you won't be prompted for ssh passwords for file transfers.
169
+
170
+ Options:
171
+
172
+ ENDSTR
173
+
174
+ opts.on("-t", "--type TYPE", "Database type: mysql or postgres. Default is mysql.") do |val|
175
+ options[:driver] = val
176
+ end
177
+
178
+ opts.on("--all-databases", "dump/import ALL databases") do |val|
179
+ options[:all_databases] = val
180
+ end
181
+
182
+ opts.on("--db DATABASE", "--database DATABASE", "Database to dump/import") do |val|
183
+ options[:database] = val
184
+ end
185
+
186
+ # TODO: Add support to Driver for this
187
+ opts.on("--databases x,y,z", Array, "dump/import multiple databases") do |val|
188
+ options[:databases] = val
189
+ end
190
+
191
+ opts.on("--tables x,y,z", Array, "dump certain tables, to be used on conjuction with a single --database") do |val|
192
+ options[:tables] = val
193
+ end
194
+
195
+ opts.on("-u USER", "--user USER", "Database user") do |val|
196
+ options[:user] = val
140
197
  end
198
+
199
+ opts.on("-p PASS", "--password PASS", "--password=pass", "Database password") do |val|
200
+ options[:password] = val
201
+ end
202
+
203
+ opts.on("-h HOST", "--host HOST", "Database host") do |val|
204
+ options[:host] = val
205
+ end
206
+
207
+ opts.on("-P PORT", "--port PORT", "Database port") do |val|
208
+ options[:port] = val
209
+ end
210
+
211
+ opts.on("--file FILENAME", "Filename of dump to create/import") do |val|
212
+ options[:dumpfile] = val
213
+ end
214
+
215
+ opts.on("--dumpfile FILENAME", "Alias for --file") do |val|
216
+ options[:dumpfile] = val
217
+ end
218
+
219
+ opts.on("--destination DESTINATION", "Destination for dumpfile. This can be a remote host:path.") do |val|
220
+ options[:destination] = val
221
+ end
222
+
223
+ opts.on("--dumpdir DIRECTORY", "Default directory for dumpfiles. Default is working directory") do |val|
224
+ options[:dumpdir] = val
225
+ end
226
+
227
+ opts.on("--import-options=[DUMPOPTIONS]", "Extra options to be included in dump command") do |val|
228
+ options[:import_options] = val.to_s
229
+ end
230
+
231
+ opts.on("--no-gzip", "Don't use gzip") do |val|
232
+ options[:gzip] = false
233
+ end
234
+
235
+ opts.on("--gzip-options=[GZIPOPTIONS]", "gzip compression options. Default is -9 (slowest /max compression)") do |val|
236
+ options[:gzip_options] = val
237
+ end
238
+
239
+ opts.on("--log-file LOGFILE", "Log file. Default is stdout.") do |val|
240
+ options[:log_file] = val
241
+ end
242
+
243
+ opts.on("--force", "Overwrite dumpfile if it exists already.") do |val|
244
+ options[:force] = val
245
+ end
246
+
247
+ opts.on("-h", "--help", "Show this message") do
248
+ puts opts
249
+ exit
250
+ end
251
+
252
+ opts.on("-v", "--version", "Show version") do
253
+ puts Dumpr::Version
254
+ exit
255
+ end
256
+
257
+ end
258
+
259
+ begin
260
+ op.parse!(args)
261
+ rescue OptionParser::MissingArgument => e
262
+ puts "invalid arguments. try #{PROG_NAME} --help"
263
+ exit 1
264
+ end
265
+
266
+
267
+ # do it
268
+ begin
269
+ Dumpr.import(options[:driver], options)
141
270
  rescue Dumpr::MissingDriver => e
142
271
  puts "#{e.message}."
143
272
  exit 1
@@ -43,8 +43,8 @@ module Dumpr
43
43
  # db connection settings
44
44
  @host = opts[:host] || "localhost"
45
45
  @port = opts[:port]
46
- @user = opts[:user] or raise BadConfig.new ":user => <db user> is required"
47
- @password = (opts[:password] || opts[:pass]) or raise BadConfig.new ":pass => <db password> is required"
46
+ @user = opts[:user] or raise BadConfig.new "user is required"
47
+ @password = (opts[:password] || opts[:pass]) # or raise BadConfig.new "password is required"
48
48
 
49
49
  # dump all_databases or specific database(s)
50
50
  @all_databases = nil
@@ -59,14 +59,14 @@ module Dumpr
59
59
  elsif opts[:all_databases]
60
60
  @all_databases = true
61
61
  else
62
- raise BadConfig.new ":database => <db schema name> is required"
62
+ #raise BadConfig.new "database is required"
63
63
  end
64
64
 
65
65
  # dump settings
66
66
  @gzip = opts[:gzip].nil? ? true : opts[:gzip]
67
67
  @gzip_options = opts[:gzip_options] || "-9"
68
- @dumpdir = opts[:dumpdir] || "./"
69
- @dumpfile = (opts[:file] || opts[:dumpfile] || opts[:filename]) or raise BadConfig.new ":dumpfile => <file.sql> is required"
68
+ @dumpdir = opts[:dumpdir] || Dir.pwd #"./"
69
+ @dumpfile = (opts[:file] || opts[:dumpfile] || opts[:filename]) or raise BadConfig.new "dumpfile is required"
70
70
  @dumpfile = @dumpfile[0].chr == "/" ? @dumpfile : File.join(@dumpdir, @dumpfile)
71
71
  @dumpfile.chomp!(".gz")
72
72
  # (optional) :destination is where dumps are exported to, and can be a remote host:path
@@ -19,6 +19,19 @@ module Dumpr
19
19
  system("which mysql") == true
20
20
  end
21
21
 
22
+ def configure(opts)
23
+ super(opts)
24
+ if @all_databases
25
+ # supported
26
+ elsif @databases
27
+ # supported
28
+ elsif @database
29
+ # supported
30
+ else
31
+ raise BadConfig.new "#{self.class} requires option --database or --databases or --all-databases"
32
+ end
33
+ end
34
+
22
35
  def dump_cmd
23
36
  if @all_databases
24
37
  "mysqldump -u #{user} --password=#{password} -h #{host} -P #{port} --all-databases #{dump_options}"
@@ -0,0 +1,58 @@
1
+ require 'dumpr/driver'
2
+ module Dumpr
3
+ module Driver
4
+ class Postgres < Base
5
+
6
+ def port
7
+ @port || 5432
8
+ end
9
+
10
+ def dump_options
11
+ @dump_options || "-Fc" #"-Fc -v"
12
+ end
13
+
14
+ def dump_installed?
15
+ system("which pg_dump") == true
16
+ end
17
+
18
+ def import_installed?
19
+ system("which pg_restore") == true
20
+ end
21
+
22
+ def configure(opts)
23
+ super(opts)
24
+ if @all_databases
25
+ raise BadConfig.new "#{self.class} does not support --all-databases"
26
+ elsif @databases
27
+ raise BadConfig.new "#{self.class} does not support multiple --databases"
28
+ elsif @database
29
+ # supported
30
+ else
31
+ raise BadConfig.new "#{self.class} requires option --database"
32
+ end
33
+ if @tables
34
+ raise BadConfig.new "#{self.class} does not support --tables"
35
+ end
36
+ end
37
+
38
+ def dump_cmd
39
+ if @all_databases
40
+ "pg_dump -h #{host} -p #{port} -U #{user} --password #{password} #{dump_options}"
41
+ elsif @databases
42
+ # not supported
43
+ else
44
+ "pg_dump -h #{host} -p #{port} -U #{user} --password #{password} #{dump_options} #{database}"
45
+ end
46
+ end
47
+
48
+ def import_cmd
49
+ if @database
50
+ "pg_restore -h #{host} -p #{port} -U #{user} --password #{password} --verbose --clean --no-owner --no-acl -d #{database} #{dumpfile}"
51
+ else
52
+ "pg_restore -h #{host} -p #{port} -U #{user} --password #{password} --verbose --clean --no-owner --no-acl #{database} #{dumpfile}"
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module Dumpr
2
- Version = "1.2".freeze
2
+ Version = "1.3".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dumpr
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Dickson
@@ -10,12 +10,14 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-04-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Dumpr provides an easy way to dump and import databases.
13
+ description: Dumpr provides an easy way to dump and import databases. Supported databases
14
+ include MySQL and Postgres.
14
15
  email:
15
16
  - jdickson@bcap.com
16
17
  executables:
17
18
  - csv2sqlinsert
18
19
  - dumpr
20
+ - dumpr-import
19
21
  extensions: []
20
22
  extra_rdoc_files:
21
23
  - README.md
@@ -27,15 +29,17 @@ files:
27
29
  - Rakefile
28
30
  - bin/csv2sqlinsert
29
31
  - bin/dumpr
32
+ - bin/dumpr-import
30
33
  - dumpr.gemspec
31
34
  - lib/dumpr.rb
32
35
  - lib/dumpr/chunkpipe.rb
33
36
  - lib/dumpr/cli.rb
34
37
  - lib/dumpr/driver.rb
35
38
  - lib/dumpr/driver/mysql.rb
39
+ - lib/dumpr/driver/postgres.rb
36
40
  - lib/dumpr/util.rb
37
41
  - lib/dumpr/version.rb
38
- homepage: http://github.com/sixjameses/dumpr
42
+ homepage: http://github.com/jamesdickson6/dumpr
39
43
  licenses:
40
44
  - MIT
41
45
  metadata: {}
@@ -55,8 +59,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
59
  version: '0'
56
60
  requirements: []
57
61
  rubyforge_project:
58
- rubygems_version: 2.7.6
62
+ rubygems_version: 2.4.6
59
63
  signing_key:
60
64
  specification_version: 4
61
- summary: Dump and load databases.
65
+ summary: Dump and import databases.
62
66
  test_files: []