Class: Flydata::Mysql::MysqlUtil
- Inherits:
-
Object
- Object
- Flydata::Mysql::MysqlUtil
- Defined in:
- lib/flydata/mysql/mysql_util.rb
Constant Summary collapse
- DEFAULT_MYSQL_CMD_OPTION =
"--default-character-set=utf8 --protocol=tcp"
Class Method Summary collapse
- .each_mysql_tabledef(tables, option) ⇒ Object
-
.generate_mysql_cmd(option) ⇒ Object
Generate mysql/mysqldump command with options options must be hash - command # mysql(default) | mysqldump - host - port - username - password - database - tables # array - ssl_ca - custom_option # string.
-
.generate_mysql_ddl_dump_cmd(option) ⇒ Object
DDL_DUMP_CMD_TEMPLATE = “MYSQL_PWD="%s" mysqldump –protocol=tcp -d -h %s -P %s -u %s %s %s”.
- .generate_mysql_show_grants_cmd(option) ⇒ Object
-
.generate_mysqldump_with_master_data_cmd(option) ⇒ Object
MYSQL_DUMP_CMD_TEMPLATE = “MYSQL_PWD="%s" mysqldump –default-character-set=utf8 –protocol=tcp -h %s -P %s -u%s –skip-lock-tables –single-transaction –hex-blob %s %s %s”.
- .generate_mysqldump_without_master_data_cmd(option) ⇒ Object
Class Method Details
.each_mysql_tabledef(tables, option) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/flydata/mysql/mysql_util.rb', line 79 def self.each_mysql_tabledef(tables, option) command = generate_mysql_ddl_dump_cmd(option.merge(tables: tables)) create_opt = {} if option.has_key?(:skip_primary_key_check) create_opt[:skip_primary_key_check] = option[:skip_primary_key_check] end Open3.popen3(command) do |stdin, stdout, stderr| stdin.close stdout.set_encoding("utf-8", "utf-8") # mysqldump output must be in UTF-8 create_flydata_ctl_table = true while !stdout.eof? begin mysql_tabledef = FlydataCore::TableDef::MysqlTableDef.create(stdout, create_opt) break if mysql_tabledef.nil? yield(mysql_tabledef, nil) rescue FlydataCore::TableDefError=> e yield(nil, e) end end errors = "" while !stderr.eof? line = stderr.gets.gsub('mysqldump: ', '') errors << line unless /Warning: Using a password on the command line interface can be insecure./ === line end raise errors unless errors.empty? end end |
.generate_mysql_cmd(option) ⇒ Object
Generate mysql/mysqldump command with options options must be hash
-
command # mysql(default) | mysqldump
-
host
-
port
-
username
-
password
-
database
-
tables # array
-
ssl_ca
-
custom_option # string
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/flydata/mysql/mysql_util.rb', line 20 def self.generate_mysql_cmd(option) raise ArgumentError.new("option must be hash.") unless option.kind_of?(Hash) option = convert_keys_to_sym(option) command = option[:command] ? option[:command] : 'mysql' host = option[:host] ? "-h #{option[:host]}" : nil port = option[:port] ? "-P #{option[:port]}" : nil username = option[:username] ? "-u#{option[:username]}" : nil password = if !(option[:password].to_s.empty?) "-p\"#{option[:password].gsub('$','\\$').gsub('"','\\"').gsub('`', '\\\`')}\"" else nil end database = option[:database] tables = option[:tables] ? option[:tables].join(' ') : nil ssl_ca = option[:ssl_ca] ? option[:ssl_ca] : nil default_option = option[:no_default_option] ? "" : DEFAULT_MYSQL_CMD_OPTION default_option += " --ssl-ca=#{ssl_ca}" if ssl_ca default_option = nil if default_option == '' custom_option = option[:custom_option] [command, host, port, username, password, default_option, custom_option, database, tables].compact.join(' ') end |
.generate_mysql_ddl_dump_cmd(option) ⇒ Object
DDL_DUMP_CMD_TEMPLATE = “MYSQL_PWD="%s" mysqldump –protocol=tcp -d -h %s -P %s -u %s %s %s”
47 48 49 50 51 52 |
# File 'lib/flydata/mysql/mysql_util.rb', line 47 def self.generate_mysql_ddl_dump_cmd(option) opt = option.dup opt[:command] = 'mysqldump' opt[:custom_option] = '-d' generate_mysql_cmd(opt) end |
.generate_mysql_show_grants_cmd(option) ⇒ Object
72 73 74 75 76 77 |
# File 'lib/flydata/mysql/mysql_util.rb', line 72 def self.generate_mysql_show_grants_cmd(option) opt = option.dup opt[:command] = 'mysql' opt[:custom_option] = '-e "SHOW GRANTS;"' generate_mysql_cmd(opt) end |
.generate_mysqldump_with_master_data_cmd(option) ⇒ Object
MYSQL_DUMP_CMD_TEMPLATE = “MYSQL_PWD="%s" mysqldump –default-character-set=utf8 –protocol=tcp -h %s -P %s -u%s –skip-lock-tables –single-transaction –hex-blob %s %s %s”
55 56 57 58 59 60 |
# File 'lib/flydata/mysql/mysql_util.rb', line 55 def self.generate_mysqldump_with_master_data_cmd(option) opt = option.dup opt[:command] = 'mysqldump' opt[:custom_option] = '--skip-lock-tables --single-transaction --hex-blob --flush-logs --master-data=2' generate_mysql_cmd(opt) end |
.generate_mysqldump_without_master_data_cmd(option) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/flydata/mysql/mysql_util.rb', line 62 def self.generate_mysqldump_without_master_data_cmd(option) opt = option.dup opt[:command] = 'mysqldump' opt[:custom_option] = '--skip-lock-tables --single-transaction --hex-blob' if opt[:result_file] opt[:custom_option] << " --result-file=#{opt[:result_file]}" end generate_mysql_cmd(opt) end |