=begin = mysqlcmds.rb *Copyright*:: (C) 2013 by Novu, LLC *Author(s)*:: Tamara Temple *Since*:: 2013-05-01 *License*:: MIT *Version*:: 0.0.1 == Description Class to wrap mysql command line applications mysqldump, mysqladmin, and mysql. =end require 'methadone' require 'RunIt' module NewBackup class MySqlCmds include Methadone::CLILogging attr_accessor :hostname, :username, :password, :database, :obfuscate_script def initialize(hostname, username, password, database, obfuscate) self.hostname=hostname.dup.to_s self.username=username.dup.to_s self.password=password.dup.to_s self.database=database.dup.to_s self.obfuscate_script=obfuscate.dup.to_s @commands = {:mysqldump => get_command('mysqldump'), :mysql => get_command('mysql'), :gzip => get_command('gzip') } debug "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: @commands: #{@commands}" end def dump(save_file) cmd = [] cmd << @commands[:mysqldump] cmd << "--host #{self.hostname}" cmd << "--user=#{self.username}" cmd << "--password=#{self.password}" unless self.password.nil? or self.password.empty? cmd << self.database cmd << "|" cmd << @commands[:gzip] cmd << ">" cmd << save_file debug "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: cmd = #{cmd.join(" ")}" saver = RunIt.new cmd.join(" ") info "dumping #{self.database} to #{save_file}" saver.run raise "#{self.class}#save error: #{saver.result.exitstatus}: #{saver.error.inspect}" unless saver.result.success? debug "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: saver.output: #{saver.output}" end def obfuscate cmd = [] cmd << @commands[:mysql] cmd << "--host #{self.hostname}" cmd << "--user #{self.username}" cmd << "--password=#{self.password}" unless self.password.nil? or self.password.empty? cmd << self.database cmd << "<" cmd << self.obfuscate_script debug "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: cmd= #{cmd.join(" ")}" obfuscator = RunIt.new cmd.join(" ") info "Running #{self.obfuscate_script} on #{self.database}" obfuscator.run raise "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: error: #{obfuscator.result.exitstatus}: #{obfuscator.error.inspect}" unless obfuscator.result.success? debug "#{self.class}##{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: obfuscator.output: #{obfuscator.output}" end private def get_command(command) command_path = `which #{command}`.chomp raise "#{command} not found!" if command_path.empty? || command_path.nil? command_path end end end