mysql_to_pg_dump 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +44 -0
- data/Rakefile +17 -0
- data/lib/mysql_to_pg_dump.rb +3 -0
- data/lib/mysql_to_pg_dump/task_uploader.rb +9 -0
- data/lib/mysql_to_pg_dump/version.rb +3 -0
- data/lib/tasks/db.rake +125 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5ba8104c56dca13a7775b2039a8524dd4cf2b1c5
|
4
|
+
data.tar.gz: cd465e9fe72f7200be4b151413d4f979575061b8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b5ba0cd5e5f4983bc45e8f52f428afb206da9d9ddb14c7d175437399fb47758bd36e0fbf76e4cf0435eefa3d74a636a8e6714783a4a6121bdeddb47655443e54
|
7
|
+
data.tar.gz: 46f1f034b6727561f0ddc3ae127a9d2cef67e741e3e78af08b549fe51b46d6cecb7f6e4ac3eb47aceb0b4e2b6380d2d102b0e67767f55985b1a991dcd625b0f6
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2016 Dimkarodinz
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# MysqlToPgDump
|
2
|
+
This gem allows pull content from mysql db (on the remote server) and
|
3
|
+
load it into your local postgres database.
|
4
|
+
Technically, it is not a dump - but result is almost the same.
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
Copy content of remote mysql db to tmp/db_server_data as .txt files.
|
8
|
+
```bash
|
9
|
+
$ rake db:pull your_server@123.4.5.6
|
10
|
+
```
|
11
|
+
Replace local postgres db content to pulled.
|
12
|
+
```bash
|
13
|
+
$ rake db:pull:load
|
14
|
+
# or
|
15
|
+
$ RAILS_ENV=staging rake db:pull:load
|
16
|
+
```
|
17
|
+
Delete all files from tmp/db_server_data.
|
18
|
+
```bash
|
19
|
+
$ rake db:pull:clean
|
20
|
+
```
|
21
|
+
Pull, replace and clean junk - all of the above in one task.
|
22
|
+
```bash
|
23
|
+
$ rake db:pull:force
|
24
|
+
```
|
25
|
+
|
26
|
+
## Installation
|
27
|
+
Add this line to your application's Gemfile:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
gem 'mysql_to_pg_dump'
|
31
|
+
```
|
32
|
+
|
33
|
+
And then execute:
|
34
|
+
```bash
|
35
|
+
$ bundle
|
36
|
+
```
|
37
|
+
|
38
|
+
Or install it yourself as:
|
39
|
+
```bash
|
40
|
+
$ gem install mysql_to_pg_dump
|
41
|
+
```
|
42
|
+
|
43
|
+
## License
|
44
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'MysqlToPgDump'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'bundler/gem_tasks'
|
data/lib/tasks/db.rake
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
require 'rake-progressbar'
|
3
|
+
|
4
|
+
namespace :db do
|
5
|
+
desc "Copies db content from production " \
|
6
|
+
"server into tmp/db_server_data"
|
7
|
+
task pull: :environment do
|
8
|
+
ARGV.each { |a| task a.to_sym do ; end }
|
9
|
+
server_addr =
|
10
|
+
ARGV[1].blank? ? server_addr_input : ARGV[1].to_s
|
11
|
+
|
12
|
+
if server_addr.include?("@")
|
13
|
+
bar = RakeProgressbar.new(db_tables.size)
|
14
|
+
|
15
|
+
system "ssh #{server_addr} 'mkdir -p #{tmp_location}'"
|
16
|
+
db_tables.each do |table|
|
17
|
+
system %{ssh #{server_addr} "echo '#{sql_select(table)}' | #{login_to_mysql} > #{file_to_save(table)}"}
|
18
|
+
bar.inc
|
19
|
+
end
|
20
|
+
bar.finished
|
21
|
+
|
22
|
+
system "scp -r #{server_addr}:#{tmp_location} tmp"
|
23
|
+
system "ssh #{server_addr} 'rm -rf #{tmp_location}'"
|
24
|
+
|
25
|
+
printf "Db data from production server " \
|
26
|
+
"has been pulled successfully\n".green
|
27
|
+
else
|
28
|
+
printf "No server address given." \
|
29
|
+
"Expecting format like 'server@123.4.5.6'\n".yellow
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
namespace :pull do
|
34
|
+
desc "Replaces current db data to pulled"
|
35
|
+
task load: :environment do
|
36
|
+
printf "Current env db data will be destroyed.\n".red
|
37
|
+
printf "Are you sure? (y/n)\n"
|
38
|
+
input = STDIN.gets.strip
|
39
|
+
|
40
|
+
if input == 'y'
|
41
|
+
if data_already_pulled?
|
42
|
+
clean_database
|
43
|
+
db_tables.each { |t| system %(psql -d #{dev['database']} -c "#{psql_import_query(t)}") }
|
44
|
+
printf "Your db data now is equal to production\n".green
|
45
|
+
else
|
46
|
+
printf "No pulled data. Run 'rake db:pull' first\n".yellow
|
47
|
+
end
|
48
|
+
else
|
49
|
+
printf "Canceled\n".blue
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "Deletes pulled db data from local tmp/db_server_data"
|
54
|
+
task :clean do
|
55
|
+
system 'rm -f tmp/db_server_data/*'
|
56
|
+
printf "Pulled db data has been " \
|
57
|
+
"deleted from /tmp successfully\n".green
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "Pulls remote mysql db data, then loads it to " \
|
61
|
+
"local postgres and cleans junk"
|
62
|
+
task force: ['db:pull', 'db:pull:load', 'db:pull:clean']
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def server_addr_input
|
68
|
+
printf "Enter server address like 'server@123.4.5.6': "
|
69
|
+
STDIN.gets.strip
|
70
|
+
end
|
71
|
+
|
72
|
+
def data_already_pulled?
|
73
|
+
if %x{ls tmp}.split("\n").include? 'db_server_data'
|
74
|
+
%x(ls tmp/db_server_data).split("\n").size == db_tables.size
|
75
|
+
else
|
76
|
+
false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def psql_import_query table_name
|
81
|
+
"\\copy #{table_name} from " \
|
82
|
+
"'tmp/db_server_data/#{production['database']}_#{table_name}.txt' " \
|
83
|
+
"delimiter E'\\t' null as 'NULL' csv header"
|
84
|
+
end
|
85
|
+
|
86
|
+
def clean_database
|
87
|
+
task_names = %w(db:drop db:create db:migrate)
|
88
|
+
task_names.each { |t| Rake::Task[t].invoke }
|
89
|
+
end
|
90
|
+
|
91
|
+
def login_to_mysql
|
92
|
+
"mysql " \
|
93
|
+
"--user=#{production['username']} " \
|
94
|
+
"--password=#{production['password']} " \
|
95
|
+
"#{production['database']}"
|
96
|
+
end
|
97
|
+
|
98
|
+
def file_to_save table_name
|
99
|
+
"#{tmp_location}/#{production['database']}_#{table_name}.txt"
|
100
|
+
end
|
101
|
+
|
102
|
+
def sql_select table_name
|
103
|
+
"SELECT * FROM #{table_name};"
|
104
|
+
end
|
105
|
+
|
106
|
+
def db_tables
|
107
|
+
ActiveRecord::Base.connection.tables - ['schema_migrations']
|
108
|
+
end
|
109
|
+
|
110
|
+
def tmp_location
|
111
|
+
'app/current/tmp/db_server_data'
|
112
|
+
end
|
113
|
+
|
114
|
+
def show_db_info env
|
115
|
+
Rails.application.config.database_configuration[env]
|
116
|
+
end
|
117
|
+
|
118
|
+
def dev
|
119
|
+
show_db_info 'development'
|
120
|
+
end
|
121
|
+
|
122
|
+
def production
|
123
|
+
show_db_info 'production'
|
124
|
+
end
|
125
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mysql_to_pg_dump
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dimkarodinz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.5
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake-progressbar
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Copies mysql db data from the remote server to the local postgres db
|
56
|
+
email:
|
57
|
+
- dimkarodin@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- MIT-LICENSE
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- lib/mysql_to_pg_dump.rb
|
66
|
+
- lib/mysql_to_pg_dump/task_uploader.rb
|
67
|
+
- lib/mysql_to_pg_dump/version.rb
|
68
|
+
- lib/tasks/db.rake
|
69
|
+
homepage: https://github.com/Dimkarodinz/mysql_to_pg_dump.git
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.5.1
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Almost mysql to postgres dump
|
93
|
+
test_files: []
|