maatkit-ruby 0.1.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/Changelog +0 -0
- data/MIT-LICENSE +21 -0
- data/README +26 -0
- data/lib/maatkit-ruby.rb +11 -0
- data/lib/maatkit-ruby/mk-archiver.rb +473 -0
- data/lib/maatkit-ruby/mk-checksum-filter.rb +122 -0
- data/lib/maatkit-ruby/mk-deadlock-logger.rb +223 -0
- data/lib/maatkit-ruby/mk-duplicate-key-checker.rb +239 -0
- data/lib/maatkit-ruby/mk-error-log.rb +240 -0
- data/lib/maatkit-ruby/mk-fifo-split.rb +130 -0
- data/lib/maatkit-ruby/mk-find.rb +137 -0
- data/lib/maatkit-ruby/mk-heartbeat.rb +300 -0
- data/lib/maatkit-ruby/mk-index-usage.rb +164 -0
- data/lib/maatkit-ruby/mk-kill.rb +124 -0
- data/lib/maatkit-ruby/mk-loadavg.rb +313 -0
- data/lib/maatkit-ruby/mk-log-player.rb +316 -0
- data/lib/maatkit-ruby/mk-merge-mqd-results.rb +248 -0
- data/lib/maatkit-ruby/mk-parallel-dump.rb +400 -0
- data/lib/maatkit-ruby/mk-parallel-restore.rb +133 -0
- data/lib/maatkit-ruby/mk-profile-compact.rb +87 -0
- data/lib/maatkit-ruby/mk-purge-logs.rb +99 -0
- data/lib/maatkit-ruby/mk-query-advisor.rb +105 -0
- data/lib/maatkit-ruby/mk-query-digest.rb +149 -0
- data/lib/maatkit-ruby/mk-query-profiler.rb +106 -0
- data/lib/maatkit-ruby/mk-show-grants.rb +103 -0
- data/lib/maatkit-ruby/mk-slave-delay.rb +102 -0
- data/lib/maatkit-ruby/mk-slave-find.rb +98 -0
- data/lib/maatkit-ruby/mk-slave-move.rb +99 -0
- data/lib/maatkit-ruby/mk-slave-prefetch.rb +124 -0
- data/lib/maatkit-ruby/mk-slave-restart.rb +116 -0
- data/lib/maatkit-ruby/mk-table-checksum.rb +151 -0
- data/lib/maatkit-ruby/mk-table-sync.rb +468 -0
- data/lib/maatkit-ruby/mk-upgrade.rb +118 -0
- data/lib/maatkit-ruby/mk-variable-advisor.rb +99 -0
- data/lib/maatkit-ruby/mk-visual-explain.rb +98 -0
- data/lib/maatkit-ruby/version.rb +17 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_maatkit_ruby.rb +11 -0
- metadata +105 -0
@@ -0,0 +1,248 @@
|
|
1
|
+
# = maatkit-ruby - A maatkit gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/maatkit-ruby
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# Merge multiple mk-query-digest reports into one.
|
10
|
+
#
|
11
|
+
# Maatkit::MergeMqdResults.new( array, str, array)
|
12
|
+
#
|
13
|
+
class Maatkit::MergeMqdResults
|
14
|
+
|
15
|
+
#
|
16
|
+
# Prompt for a password when connecting to MySQL.
|
17
|
+
attr_accessor :ask_pass # FALSE
|
18
|
+
|
19
|
+
#
|
20
|
+
# short form: -A; type: string
|
21
|
+
# Default character set. If the value is utf8, sets Perl's binmode on STDOUT to utf8, passes the
|
22
|
+
# mysql_enable_utf8 option to DBD::mysql, and runs SET NAMES UTF8 after connecting to MySQL. Any other
|
23
|
+
# value sets binmode on STDOUT without the utf8 layer, and runs SET NAMES after connecting to MySQL.
|
24
|
+
attr_accessor :charset # (No # value)
|
25
|
+
|
26
|
+
#
|
27
|
+
# type: Array
|
28
|
+
# Read this comma-separated list of config files; if specified, this must be the first option on the
|
29
|
+
# command line.
|
30
|
+
attr_accessor :config # /etc/maatkit/maatkit.conf,/etc/maatkit/mk_merge_mqd_results.conf,/home/joel/.maatkit.conf,/home/joel/.mk_merge_mqd_results.conf
|
31
|
+
|
32
|
+
#
|
33
|
+
# short form: -F; type: string
|
34
|
+
# Only read mysql options from the given file. You must give an absolute pathname.
|
35
|
+
attr_accessor :defaults_file # (No # value)
|
36
|
+
|
37
|
+
#
|
38
|
+
# type: array; default: 5,10
|
39
|
+
# Explain items when there are more or fewer than expected.
|
40
|
+
# Defines the number of items expected to be seen in the report as controlled by "--limit" and
|
41
|
+
# "--outliers". If there are more or fewer items in the report, each one will explain why it was
|
42
|
+
# included.
|
43
|
+
attr_accessor :expected_range # 5,10
|
44
|
+
|
45
|
+
#
|
46
|
+
# type: DSN
|
47
|
+
# Run EXPLAIN for the sample query with this DSN and print results.
|
48
|
+
# This causes mk-merge-mqd-results to run EXPLAIN and include the output into the report. For safety,
|
49
|
+
# queries that appear to have a subquery that EXPLAIN will execute won't be EXPLAINed. Those are
|
50
|
+
# typically "derived table" queries of the form
|
51
|
+
# select ... from ( select .... ) der;
|
52
|
+
attr_accessor :explain # (No # value)
|
53
|
+
|
54
|
+
#
|
55
|
+
# Add query fingerprints to the standard query analysis report. This is mostly useful for debugging
|
56
|
+
# purposes.
|
57
|
+
attr_accessor :fingerprints # FALSE
|
58
|
+
|
59
|
+
#
|
60
|
+
# default: yes
|
61
|
+
# Print extra information to make analysis easy.
|
62
|
+
# This option adds code snippets to make it easy to run SHOW CREATE TABLE and SHOW TABLE STATUS for the
|
63
|
+
# query's tables. It also rewrites non-SELECT queries into a SELECT that might be helpful for
|
64
|
+
# determining the non-SELECT statement's index usage.
|
65
|
+
attr_accessor :for_explain # TRUE
|
66
|
+
|
67
|
+
#
|
68
|
+
# Show help and exit.
|
69
|
+
attr_accessor :help # TRUE
|
70
|
+
|
71
|
+
#
|
72
|
+
# short form: -h; type: string
|
73
|
+
# Connect to host.
|
74
|
+
attr_accessor :host # (No # value)
|
75
|
+
|
76
|
+
#
|
77
|
+
# type: string; default: 95%:20
|
78
|
+
# Limit output to the given percentage or count.
|
79
|
+
# If the argument is an integer, report only the top N worst queries. If the argument is an integer
|
80
|
+
# followed by the "%" sign, report that percentage of the worst queries. If the percentage is followed
|
81
|
+
# by a colon and another integer, report the top percentage or the number specified by that integer,
|
82
|
+
# whichever comes first.
|
83
|
+
# See also "--outliers".
|
84
|
+
attr_accessor :limit # 95%:20
|
85
|
+
|
86
|
+
#
|
87
|
+
# type: string; default: Query_time:sum
|
88
|
+
# Sort events by this attribute and aggregate function.
|
89
|
+
attr_accessor :order_by # Query_time:sum
|
90
|
+
|
91
|
+
#
|
92
|
+
# type: string; default: Query_time:1:10
|
93
|
+
# Report outliers by attribute:percentile:count.
|
94
|
+
# The syntax of this option is a comma-separated list of colon-delimited strings. The first field is the
|
95
|
+
# attribute by which an outlier is defined. The second is a number that is compared to the attribute's
|
96
|
+
# 95th percentile. The third is optional, and is compared to the attribute's cnt aggregate. Queries
|
97
|
+
# that pass this specification are added to the report, regardless of any limits you specified in
|
98
|
+
# "--limit".
|
99
|
+
# For example, to report queries whose 95th percentile Query_time is at least 60 seconds and which are
|
100
|
+
# seen at least 5 times, use the following argument:
|
101
|
+
# --outliers Query_time:60:5
|
102
|
+
attr_accessor :outliers # Query_time:1:10
|
103
|
+
|
104
|
+
#
|
105
|
+
# short form: -p; type: string
|
106
|
+
# Password to use when connecting.
|
107
|
+
attr_accessor :password # (No # value)
|
108
|
+
|
109
|
+
#
|
110
|
+
# short form: -P; type: int
|
111
|
+
# Port number to use for connection.
|
112
|
+
attr_accessor :port # (No # value)
|
113
|
+
|
114
|
+
#
|
115
|
+
# type: Array; default: rusage,date,files,header,profile,query_report,prepared
|
116
|
+
# Print these sections of the query analysis report.
|
117
|
+
# SECTION# # PRINTS
|
118
|
+
# ============ ==============================================================
|
119
|
+
# rusgae# # CPU times and memory usage reported by ps
|
120
|
+
# date# # # Current local date and time
|
121
|
+
# files# # Input files read/parse
|
122
|
+
# header# # Summary of the entire analysis run
|
123
|
+
# profile# # Compact table of queries for an at-a-glance view of the report
|
124
|
+
# query_report Detailed information about each unique query
|
125
|
+
# prepared# Prepared statements
|
126
|
+
# The sections are printed in the order specified. The rusage, date, files and header sections are
|
127
|
+
# grouped together if specified together; other sections are separted by blank lines.
|
128
|
+
attr_accessor :report_format # rusage,date,files,header,profile,query_report,prepared
|
129
|
+
|
130
|
+
#
|
131
|
+
# type: string; default: Query_time
|
132
|
+
# Chart the distribution of this attribute's values.
|
133
|
+
# The distribution chart is limited to time-based attributes, so charting "Rows_examined", for example,
|
134
|
+
# will produce a useless chart.
|
135
|
+
attr_accessor :report_histogram # Query_time
|
136
|
+
|
137
|
+
#
|
138
|
+
# type: string; default: wait_timeout=10000
|
139
|
+
# Set these MySQL variables. Immediately after connecting to MySQL, this string will be appended to SET
|
140
|
+
# and executed.
|
141
|
+
attr_accessor :set_vars # wait_timeout=10000
|
142
|
+
|
143
|
+
#
|
144
|
+
# type: int; default: 1024
|
145
|
+
# Shorten long statements in reports.
|
146
|
+
# Shortens long statements, replacing the omitted portion with a "/*... omitted ...*/" comment. This
|
147
|
+
# applies only to the output in reports, not to information stored other places. It prevents a large
|
148
|
+
# statement from causing difficulty in a report. The argument is the preferred length of the shortened
|
149
|
+
# statement. Not all statements can be shortened, but very large INSERT and similar statements often
|
150
|
+
# can; and so can IN() lists, although only the first such list in the statement will be shortened.
|
151
|
+
# If it shortens something beyond recognition, you can find the original statement in the log, at the
|
152
|
+
# offset shown in the report header.
|
153
|
+
attr_accessor :shorten # 1024
|
154
|
+
|
155
|
+
#
|
156
|
+
# type: Hash
|
157
|
+
# Show all values for these attributes.
|
158
|
+
# By default mk-query-digest only shows as many of an attribute's value that fit on a single line. This
|
159
|
+
# option allows you to specify attributes for which all values will be shown (line width is ignored).
|
160
|
+
# This only works for attributes with string values like user, host, db, etc. Multiple attributes can be
|
161
|
+
# specified, comma-separated.
|
162
|
+
attr_accessor :show_all #
|
163
|
+
|
164
|
+
#
|
165
|
+
# short form: -S; type: string
|
166
|
+
# Socket file to use for connection.
|
167
|
+
attr_accessor :socket # (No # value)
|
168
|
+
|
169
|
+
#
|
170
|
+
# short form: -u; type: string
|
171
|
+
# User for login if not current user.
|
172
|
+
attr_accessor :user # (No # value)
|
173
|
+
|
174
|
+
#
|
175
|
+
# Show version and exit.
|
176
|
+
attr_accessor :version # FALSE
|
177
|
+
|
178
|
+
#
|
179
|
+
# default: yes
|
180
|
+
# Print 0% boolean values in report.
|
181
|
+
attr_accessor :zero_bool # TRUE
|
182
|
+
|
183
|
+
#
|
184
|
+
# Sets the executable path, otherwise the environment path will be used.
|
185
|
+
#
|
186
|
+
attr_accessor :path_to_mk_merge_mqd_results
|
187
|
+
|
188
|
+
#
|
189
|
+
# Returns a new MergeMqdResults Object
|
190
|
+
#
|
191
|
+
def initialize()
|
192
|
+
end
|
193
|
+
|
194
|
+
#
|
195
|
+
# Execute the command
|
196
|
+
#
|
197
|
+
def start(options = nil)
|
198
|
+
tmp = Tempfile.new('tmp')
|
199
|
+
command = option_string() + options.to_s + " 2> " + tmp.path
|
200
|
+
success = system(command)
|
201
|
+
if success
|
202
|
+
begin
|
203
|
+
while (line = tmp.readline)
|
204
|
+
line.chomp
|
205
|
+
selected_string = line
|
206
|
+
end
|
207
|
+
rescue EOFError
|
208
|
+
tmp.close
|
209
|
+
end
|
210
|
+
return selected_string
|
211
|
+
else
|
212
|
+
tmp.close!
|
213
|
+
return success
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def config
|
218
|
+
option_string()
|
219
|
+
end
|
220
|
+
|
221
|
+
private
|
222
|
+
|
223
|
+
def option_string()
|
224
|
+
|
225
|
+
unless @path_to_mk_merge_mqd_results
|
226
|
+
ostring = "mk-merge-mqd-results "
|
227
|
+
else
|
228
|
+
ostring = @path_to_mk_merge_mqd_results + " "
|
229
|
+
end
|
230
|
+
|
231
|
+
self.instance_variables.each do |i|
|
232
|
+
tmp_value = self.instance_variable_get "#{i}"
|
233
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
234
|
+
unless tmp_string == "--path-to-mk-merge-mqd-results"
|
235
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
236
|
+
ostring += "#{tmp_string} "
|
237
|
+
else
|
238
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
return ostring
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
end
|
248
|
+
|
@@ -0,0 +1,400 @@
|
|
1
|
+
# = maatkit-ruby - A maatkit gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/maatkit-ruby
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# Dump MySQL tables in parallel.
|
10
|
+
#
|
11
|
+
# Maatkit::ParallelDump.new( array, str, array)
|
12
|
+
#
|
13
|
+
class Maatkit::ParallelDump
|
14
|
+
|
15
|
+
#
|
16
|
+
# Prompt for a password when connecting to MySQL.
|
17
|
+
attr_accessor :ask_pass # FALSE
|
18
|
+
|
19
|
+
#
|
20
|
+
# type: string
|
21
|
+
# The base directory in which files will be stored.
|
22
|
+
# The default is the current working directory. Each database gets its own directory under the base
|
23
|
+
# directory. So if the base directory is "/tmp" and database "foo" is dumped, then the directory
|
24
|
+
# "/tmp/foo" is created which contains all the table dump files for "foo".
|
25
|
+
attr_accessor :base_dir # /home/joel/maatkit_ruby/lib/maatkit_ruby
|
26
|
+
|
27
|
+
#
|
28
|
+
# default: yes
|
29
|
+
# Process tables in descending order of size (biggest to smallest).
|
30
|
+
# This strategy gives better parallelization. Suppose there are 8 threads and the last table is huge.
|
31
|
+
# We will finish everything else and then be running single-threaded while that one finishes. If that
|
32
|
+
# one runs first, then we will have the max number of threads running at a time for as long as possible.
|
33
|
+
attr_accessor :biggest_first # TRUE
|
34
|
+
|
35
|
+
#
|
36
|
+
# default: yes
|
37
|
+
# Dump the master/slave position.
|
38
|
+
# Dump binary log positions from both "SHOW MASTER STATUS" and "SHOW SLAVE STATUS", whichever can be
|
39
|
+
# retrieved from the server. The data is dumped to a file named 00_master_data.sql in the "--base-dir".
|
40
|
+
# The file also contains details of each table dumped, including the WHERE clauses used to dump it in
|
41
|
+
# chunks.
|
42
|
+
attr_accessor :bin_log_position # TRUE
|
43
|
+
|
44
|
+
#
|
45
|
+
# short form: -A; type: string
|
46
|
+
# Default character set. If the value is utf8, sets Perl's binmode on STDOUT to utf8, passes the
|
47
|
+
# mysql_enable_utf8 option to DBD::mysql, and runs SET NAMES UTF8 after connecting to MySQL. Any other
|
48
|
+
# value sets binmode on STDOUT without the utf8 layer, and runs SET NAMES after connecting to MySQL.
|
49
|
+
attr_accessor :charset # (No # value)
|
50
|
+
|
51
|
+
#
|
52
|
+
# type: string
|
53
|
+
# Number of rows or data size to dump per file.
|
54
|
+
# Specifies that the table should be dumped in segments of approximately the size given. The syntax is
|
55
|
+
# either a plain integer, which is interpreted as a number of rows per chunk, or an integer with a suffix
|
56
|
+
# of G, M, or k, which is interpreted as the size of the data to be dumped in each chunk. See "CHUNKS"
|
57
|
+
# for more details.
|
58
|
+
attr_accessor :chunk_size # (No # value)
|
59
|
+
|
60
|
+
#
|
61
|
+
# Fetch and buffer results in memory on client.
|
62
|
+
# By default this option is not enabled because it causes data to be completely fetched from the server
|
63
|
+
# then buffered in-memory on the client. For large dumps this can require a lot of memory
|
64
|
+
# Instead, the default (when this option is not specified) is to fetch and dump rows one-by-one from the
|
65
|
+
# server. This requires a lot less memory on the client but can keep the tables on the server locked
|
66
|
+
# longer.
|
67
|
+
# Use this option only if you're sure that the data being dumped is relatively small and the client has
|
68
|
+
# sufficient memory. Remember that, if this option is specified, all "--threads" will buffer their
|
69
|
+
# results in-memory, so memory consumption can increase by a factor of N "--threads".
|
70
|
+
attr_accessor :client_side_buffering # FALSE
|
71
|
+
|
72
|
+
#
|
73
|
+
# type: Array
|
74
|
+
# Read this comma-separated list of config files; if specified, this must be the first option on the
|
75
|
+
# command line.
|
76
|
+
attr_accessor :config # /etc/maatkit/maatkit.conf,/etc/maatkit/mk_parallel_dump.conf,/home/joel/.maatkit.conf,/home/joel/.mk_parallel_dump.conf
|
77
|
+
|
78
|
+
#
|
79
|
+
# Do "--tab" dump in CSV format (implies "--tab").
|
80
|
+
# Changes "--tab" options so the dump file is in comma-separated values (CSV) format. The SELECT INTO
|
81
|
+
# OUTFILE statement looks like the following, and can be re-loaded with the same options:
|
82
|
+
# # SELECT * INTO OUTFILE %D.%N.%6C.txt
|
83
|
+
# # FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
|
84
|
+
# # LINES TERMINATED BY '\n' FROM %D.%N;
|
85
|
+
attr_accessor :csv # FALSE
|
86
|
+
|
87
|
+
#
|
88
|
+
# short form: -d; type: hash
|
89
|
+
# Dump only this comma-separated list of databases.
|
90
|
+
attr_accessor :databases # (No # value)
|
91
|
+
|
92
|
+
#
|
93
|
+
# type: string
|
94
|
+
# Dump only databases whose names match this Perl regex.
|
95
|
+
attr_accessor :databases_regex # (No # value)
|
96
|
+
|
97
|
+
#
|
98
|
+
# short form: -F; type: string
|
99
|
+
# Only read mysql options from the given file. You must give an absolute pathname.
|
100
|
+
attr_accessor :defaults_file # (No # value)
|
101
|
+
|
102
|
+
#
|
103
|
+
# Print commands instead of executing them.
|
104
|
+
attr_accessor :dry_run # FALSE
|
105
|
+
|
106
|
+
#
|
107
|
+
# short form: -e; type: hash
|
108
|
+
# Dump only tables that use this comma-separated list of storage engines.
|
109
|
+
attr_accessor :engines # (No # value)
|
110
|
+
|
111
|
+
#
|
112
|
+
# Use "FLUSH TABLES WITH READ LOCK".
|
113
|
+
# This is enabled by default. The lock is taken once, at the beginning of the whole process and is
|
114
|
+
# released after all tables have been dumped. If you want to lock only the tables you're dumping, use
|
115
|
+
# "--lock-tables".
|
116
|
+
attr_accessor :flush_lock # FALSE
|
117
|
+
|
118
|
+
#
|
119
|
+
# Execute "FLUSH LOGS" when getting binlog positions.
|
120
|
+
# This option is NOT enabled by default because it causes the MySQL server to rotate its error log,
|
121
|
+
# potentially overwriting error messages.
|
122
|
+
attr_accessor :flush_log # FALSE
|
123
|
+
|
124
|
+
#
|
125
|
+
# default: yes
|
126
|
+
# Compress (gzip) SQL dump files; does not work with "--tab".
|
127
|
+
# The IO::Compress::Gzip Perl module is used to compress SQL dump files as they are written to disk. The
|
128
|
+
# resulting dump files have a ".gz" extension, like "table.000000.sql.gz". They can be uncompressed with
|
129
|
+
# gzip. mk-parallel-restore will automatically uncompress them, too, when restoring.
|
130
|
+
# This option does not work with "--tab" because the MySQL server writes the tab dump files directly
|
131
|
+
# using "SELECT INTO OUTFILE".
|
132
|
+
attr_accessor :gzip # TRUE
|
133
|
+
|
134
|
+
#
|
135
|
+
# Show help and exit.
|
136
|
+
attr_accessor :help # TRUE
|
137
|
+
|
138
|
+
#
|
139
|
+
# short form: -h; type: string
|
140
|
+
# Connect to host.
|
141
|
+
attr_accessor :host # (No # value)
|
142
|
+
|
143
|
+
#
|
144
|
+
# type: Hash
|
145
|
+
# Ignore this comma-separated list of databases.
|
146
|
+
attr_accessor :ignore_databases #
|
147
|
+
|
148
|
+
#
|
149
|
+
# type: string
|
150
|
+
# Ignore databases whose names match this Perl regex.
|
151
|
+
attr_accessor :ignore_databases_regex # (No # value)
|
152
|
+
|
153
|
+
#
|
154
|
+
# type: Hash; default: FEDERATED,MRG_MyISAM
|
155
|
+
# Do not dump tables that use this comma-separated list of storage engines.
|
156
|
+
# The schema file will be dumped as usual. This prevents dumping data for Federated tables and Merge
|
157
|
+
# tables.
|
158
|
+
attr_accessor :ignore_engines # FEDERATED,MRG_MyISAM
|
159
|
+
|
160
|
+
#
|
161
|
+
# type: Hash
|
162
|
+
# Ignore this comma-separated list of table names.
|
163
|
+
# Table names may be qualified with the database name.
|
164
|
+
attr_accessor :ignore_tables #
|
165
|
+
|
166
|
+
#
|
167
|
+
# type: string
|
168
|
+
# Ignore tables whose names match the Perl regex.
|
169
|
+
attr_accessor :ignore_tables_regex # (No # value)
|
170
|
+
|
171
|
+
#
|
172
|
+
# Use "LOCK TABLES" (disables "--[no]flush-lock").
|
173
|
+
# Disables "--[no]flush-lock" (unless it was explicitly set) and locks tables with "LOCK TABLES READ".
|
174
|
+
# The lock is taken and released for every table as it is dumped.
|
175
|
+
attr_accessor :lock_tables # FALSE
|
176
|
+
|
177
|
+
#
|
178
|
+
# Dump float types with extra precision for lossless restore (requires "--tab").
|
179
|
+
# Wraps these types with a call to "FORMAT()" with 17 digits of precision. According to the comments in
|
180
|
+
# Google's patches, this will give lossless dumping and reloading in most cases. (I shamelessly stole
|
181
|
+
# this technique from them. I don't know enough about floating-point math to have an opinion).
|
182
|
+
# This works only with "--tab".
|
183
|
+
attr_accessor :lossless_floats # FALSE
|
184
|
+
|
185
|
+
#
|
186
|
+
# short form: -p; type: string
|
187
|
+
# Password to use when connecting.
|
188
|
+
attr_accessor :password # (No # value)
|
189
|
+
|
190
|
+
#
|
191
|
+
# type: string
|
192
|
+
# Create the given PID file. The file contains the process ID of the script. The PID file is removed
|
193
|
+
# when the script exits. Before starting, the script checks if the PID file already exists. If it does
|
194
|
+
# not, then the script creates and writes its own PID to it. If it does, then the script checks the
|
195
|
+
# following: if the file contains a PID and a process is running with that PID, then the script dies; or,
|
196
|
+
# if there is no process running with that PID, then the script overwrites the file with its own PID and
|
197
|
+
# starts; else, if the file contains no PID, then the script dies.
|
198
|
+
attr_accessor :pid # (No # value)
|
199
|
+
|
200
|
+
#
|
201
|
+
# short form: -P; type: int
|
202
|
+
# Port number to use for connection.
|
203
|
+
attr_accessor :port # (No # value)
|
204
|
+
|
205
|
+
#
|
206
|
+
# Display progress reports.
|
207
|
+
# Progress is displayed each time a table or chunk of a table finishes dumping. Progress is calculated
|
208
|
+
# by measuring the average data size of each full chunk and assuming all bytes are created equal. The
|
209
|
+
# output is the completed and total bytes, the percent completed, estimated time remaining, and estimated
|
210
|
+
# completion time. For example:
|
211
|
+
# 40.72k/112.00k 36.36% ETA 00:00 (2009-10-27T19:17:53)
|
212
|
+
# If "--chunk-size" is not specified then each table is effectively one big chunk and the progress
|
213
|
+
# reports are pretty accurate. When "--chunk-size" is specified the progress reports can be skewed
|
214
|
+
# because of averaging.
|
215
|
+
# Progress reports are inaccurate when a dump is resumed. This is known issue and will be fixed in a
|
216
|
+
# later release.
|
217
|
+
attr_accessor :progress # FALSE
|
218
|
+
|
219
|
+
#
|
220
|
+
# short form: -q
|
221
|
+
# Quiet output; disables "--verbose".
|
222
|
+
attr_accessor :quiet # FALSE
|
223
|
+
|
224
|
+
#
|
225
|
+
# default: yes
|
226
|
+
# Resume dumps.
|
227
|
+
attr_accessor :resume # TRUE
|
228
|
+
|
229
|
+
#
|
230
|
+
# type: string; default: wait_timeout=10000
|
231
|
+
# Set these MySQL variables. Immediately after connecting to MySQL, this string will be appended to SET
|
232
|
+
# and executed.
|
233
|
+
attr_accessor :set_vars # wait_timeout=10000
|
234
|
+
|
235
|
+
#
|
236
|
+
# short form: -S; type: string
|
237
|
+
# Socket file to use for connection.
|
238
|
+
attr_accessor :socket # (No # value)
|
239
|
+
|
240
|
+
#
|
241
|
+
# Issue "STOP SLAVE" on server before dumping data.
|
242
|
+
# This ensures that the data is not changing during the dump. Issues "START SLAVE" after the dump is
|
243
|
+
# complete.
|
244
|
+
# If the slave is not running, throws an error and exits. This is to prevent possibly bad things from
|
245
|
+
# happening if the slave is not running because of a problem, or because someone intentionally stopped
|
246
|
+
# the slave for maintenance or some other purpose.
|
247
|
+
attr_accessor :stop_slave # FALSE
|
248
|
+
|
249
|
+
#
|
250
|
+
# Dump tab-separated (sets "--umask" 0).
|
251
|
+
# Dump via "SELECT INTO OUTFILE", which is similar to what "mysqldump" does with the "--tab" option, but
|
252
|
+
# you're not constrained to a single database at a time.
|
253
|
+
# Before you use this option, make sure you know what "SELECT INTO OUTFILE" does! I recommend using it
|
254
|
+
# only if you're running mk-parallel-dump on the same machine as the MySQL server, but there is no
|
255
|
+
# protection if you don't.
|
256
|
+
# This option sets "--umask" to zero so auto-created directories are writable by the MySQL server.
|
257
|
+
attr_accessor :tab # FALSE
|
258
|
+
|
259
|
+
#
|
260
|
+
# short form: -t; type: hash
|
261
|
+
# Dump only this comma-separated list of table names.
|
262
|
+
# Table names may be qualified with the database name.
|
263
|
+
attr_accessor :tables # (No # value)
|
264
|
+
|
265
|
+
#
|
266
|
+
# type: string
|
267
|
+
# Dump only tables whose names match this Perl regex.
|
268
|
+
attr_accessor :tables_regex # (No # value)
|
269
|
+
|
270
|
+
#
|
271
|
+
# type: int; default: 2
|
272
|
+
# Number of threads to dump concurrently.
|
273
|
+
# Specifies the number of parallel processes to run. The default is 2 (this is mk-parallel-dump, after
|
274
|
+
# all -- 1 is not parallel). On GNU/Linux machines, the default is the number of times 'processor'
|
275
|
+
# appears in /proc/cpuinfo. On Windows, the default is read from the environment. In any case, the
|
276
|
+
# default is at least 2, even when there's only a single processor.
|
277
|
+
attr_accessor :threads # 2
|
278
|
+
|
279
|
+
#
|
280
|
+
# default: yes
|
281
|
+
# Enable TIMESTAMP columns to be dumped and reloaded between different time zones. mk-parallel-dump sets
|
282
|
+
# its connection time zone to UTC and adds "SET TIME_ZONE='+00:00'" to the dump file. Without this
|
283
|
+
# option, TIMESTAMP columns are dumped and reloaded in the time zones local to the source and destination
|
284
|
+
# servers, which can cause the values to change. This option also protects against changes due to
|
285
|
+
# daylight saving time.
|
286
|
+
# This option is identical to "mysqldump --tz-utc". In fact, the above text was copied from mysqldump's
|
287
|
+
# man page.
|
288
|
+
attr_accessor :tz_utc # TRUE
|
289
|
+
|
290
|
+
#
|
291
|
+
# type: string
|
292
|
+
# Set the program's "umask" to this octal value.
|
293
|
+
# This is useful when you want created files and directories to be readable or writable by other users
|
294
|
+
# (for example, the MySQL server itself).
|
295
|
+
attr_accessor :umask # (No # value)
|
296
|
+
|
297
|
+
#
|
298
|
+
# short form: -u; type: string
|
299
|
+
# User for login if not current user.
|
300
|
+
attr_accessor :user # (No # value)
|
301
|
+
|
302
|
+
#
|
303
|
+
# short form: -v; cumulative: yes
|
304
|
+
# Be verbose; can specify multiple times.
|
305
|
+
# See "OUTPUT".
|
306
|
+
attr_accessor :verbose # 0
|
307
|
+
|
308
|
+
#
|
309
|
+
# Show version and exit.
|
310
|
+
attr_accessor :version # FALSE
|
311
|
+
|
312
|
+
#
|
313
|
+
# short form: -w; type: time; default: 5m
|
314
|
+
# Wait limit when the server is down.
|
315
|
+
# If the MySQL server crashes during dumping, waits until the server comes back and then continues with
|
316
|
+
# the rest of the tables. "mk-parallel-dump" will check the server every second until this time is
|
317
|
+
# exhausted, at which point it will give up and exit.
|
318
|
+
# This implements Peter Zaitsev's "safe dump" request: sometimes a dump on a server that has corrupt data
|
319
|
+
# will kill the server. mk-parallel-dump will wait for the server to restart, then keep going. It's
|
320
|
+
# hard to say which table killed the server, so no tables will be retried. Tables that were being
|
321
|
+
# concurrently dumped when the crash happened will not be retried. No additional locks will be taken
|
322
|
+
# after the server restarts; it's assumed this behavior is useful only on a server you're not trying to
|
323
|
+
# dump while it's in production.
|
324
|
+
attr_accessor :wait # 300
|
325
|
+
|
326
|
+
#
|
327
|
+
# default: yes
|
328
|
+
# Add a chunk for rows with zero or zero-equivalent values. The only has an effect when "--chunk-size"
|
329
|
+
# is specified. The purpose of the zero chunk is to capture a potentially large number of zero values
|
330
|
+
# that would imbalance the size of the first chunk. For example, if a lot of negative numbers were
|
331
|
+
# inserted into an unsigned integer column causing them to be stored as zeros, then these zero values are
|
332
|
+
# captured by the zero chunk instead of the first chunk and all its non-zero values.
|
333
|
+
attr_accessor :zero_chunk # TRUE
|
334
|
+
|
335
|
+
#
|
336
|
+
# Sets the executable path, otherwise the environment path will be used.
|
337
|
+
#
|
338
|
+
attr_accessor :path_to_mk_parallel_dump
|
339
|
+
|
340
|
+
#
|
341
|
+
# Returns a new ParallelDump Object
|
342
|
+
#
|
343
|
+
def initialize()
|
344
|
+
end
|
345
|
+
|
346
|
+
#
|
347
|
+
# Execute the command
|
348
|
+
#
|
349
|
+
def start(options = nil)
|
350
|
+
tmp = Tempfile.new('tmp')
|
351
|
+
command = option_string() + options.to_s + " 2> " + tmp.path
|
352
|
+
success = system(command)
|
353
|
+
if success
|
354
|
+
begin
|
355
|
+
while (line = tmp.readline)
|
356
|
+
line.chomp
|
357
|
+
selected_string = line
|
358
|
+
end
|
359
|
+
rescue EOFError
|
360
|
+
tmp.close
|
361
|
+
end
|
362
|
+
return selected_string
|
363
|
+
else
|
364
|
+
tmp.close!
|
365
|
+
return success
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
def config
|
370
|
+
option_string()
|
371
|
+
end
|
372
|
+
|
373
|
+
private
|
374
|
+
|
375
|
+
def option_string()
|
376
|
+
|
377
|
+
unless @path_to_mk_parallel_dump
|
378
|
+
ostring = "mk-parallel-dump "
|
379
|
+
else
|
380
|
+
ostring = @path_to_mk_parallel_dump + " "
|
381
|
+
end
|
382
|
+
|
383
|
+
self.instance_variables.each do |i|
|
384
|
+
tmp_value = self.instance_variable_get "#{i}"
|
385
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
386
|
+
unless tmp_string == "--path-to-mk-parallel-dump"
|
387
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
388
|
+
ostring += "#{tmp_string} "
|
389
|
+
else
|
390
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
return ostring
|
396
|
+
|
397
|
+
end
|
398
|
+
|
399
|
+
end
|
400
|
+
|