class Outback::MysqlSource

Public Instance Methods

create_archives(timestamp, tmpdir) click to toggle source
# File lib/outback/mysql_source.rb, line 25
def create_archives(timestamp, tmpdir)
  mysql_host = host || 'localhost'
  mysql_port = (port || 3306) unless socket
  if databases.empty?
    # (host=nil, user=nil, passwd=nil, db=nil, port=nil, socket=nil, flag=nil)
    mysql = Mysql.connect(mysql_host, user, password, nil, mysql_port, socket)
    @databases = mysql.list_dbs - excludes
    mysql.close
  end
  
  archives = databases.collect do |database|
    archive_name = Pathname.new(tmpdir).join("#{backup_name}_#{timestamp}_#{database}.sql.gz")
    mysql_conf_file = Pathname.new(tmpdir).join('outback_my.cnf')
    File.open(mysql_conf_file, 'w') { |f| f << "[client]\npassword=#{password}\n" }
    FileUtils.chmod 0600, mysql_conf_file
    logger.debug "MysqlSource: dumping database '#{database}'"
    commandline = "mysqldump --defaults-extra-file=#{mysql_conf_file} --opt --user=#{user} --host=#{mysql_host} --port=#{mysql_port} #{database} | gzip > #{archive_name}"
    result = `#{commandline}`.strip
    logger.debug(result) unless result.blank?
    logger.info "Archived database #{database}"
    SourceArchive.new(archive_name).tap { |archive| logger.debug "dumped #{archive.filename.basename} with #{archive.size} bytes" }
  end
end
database(*names) click to toggle source
# File lib/outback/mysql_source.rb, line 13
def database(*names)
  databases.concat(names.map(&:to_s)).uniq!
end
databases() click to toggle source
# File lib/outback/mysql_source.rb, line 5
def databases
  @databases ||= []
end
exclude(*names) click to toggle source
# File lib/outback/mysql_source.rb, line 17
def exclude(*names)
  excludes.concat(names.map(&:to_s)).uniq!
end
excludes() click to toggle source
# File lib/outback/mysql_source.rb, line 9
def excludes
  @excludes ||= ['mysql', 'performance_schema', 'information_schema']
end
valid?() click to toggle source
# File lib/outback/mysql_source.rb, line 21
def valid?
  user && password
end