class MysqlSlaver::DbCopier

Attributes

database[RW]
executor[RW]
master_host[RW]
mysql_root_password[RW]
port[RW]
socket_file[RW]
tables[RW]

Public Class Methods

new(params) click to toggle source
# File lib/mysql_slaver/db_copier.rb, line 7
def initialize(params)
  @master_host         = params.fetch(:master_host)
  @mysql_root_password = params.fetch(:mysql_root_password, '')
  @database            = params.fetch(:database)
  @port                = params.fetch(:port, nil)
  @socket_file         = params.fetch(:socket_file, nil)
  @executor            = params.fetch(:executor) { Executor.new(ssh_port: params[:ssh_port]) }
  @tables              = params.fetch(:tables, nil)
end

Public Instance Methods

copy!() click to toggle source
# File lib/mysql_slaver/db_copier.rb, line 17
def copy!
  executor.execute mysql_command("stop slave", mysql_params)
  cmd = mysqldump
  dump_cmd = executor.ssh_command(cmd, master_host)
  load_cmd = ['mysql', mysql_credentials('root', mysql_params), database].join(' ')
  command = [dump_cmd, load_cmd].join(' | ')
  executor.execute command
end

Private Instance Methods

mysql_params() click to toggle source
# File lib/mysql_slaver/db_copier.rb, line 28
def mysql_params
  {
    root_password:  mysql_root_password,
    socket_file:    socket_file
  }
end
mysqldump() click to toggle source
# File lib/mysql_slaver/db_copier.rb, line 35
def mysqldump
  creds = mysql_credentials('root', mysql_params)
  rtn =  %[mysqldump]
  rtn << %[ -P #{port}] if port
  rtn << %[ #{creds} -h #{master_host} --master-data --single-transaction --quick --skip-add-locks --skip-lock-tables --default-character-set=utf8 --compress #{database}]
  rtn << %[ #{tables}] unless tables.to_s.empty?
  rtn
end