module Outback class MysqlSource < Source attr_setter :user, :password, :host, :port, :socket def databases @databases ||= [] end def excludes @excludes ||= [] end def database(name) databases << name end def exclude(name) excludes << name.to_s end def valid? user && password end def create_archives(backup_name, 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.databases - 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 # base_command="$mysqldump --defaults-extra-file=$mysql_conffile $opt -u$BM_MYSQL_ADMINLOGIN -h$BM_MYSQL_HOST -P$BM_MYSQL_PORT" commandline = "mysqldump --defaults-extra-file=#{mysql_conf_file} --user=#{user} --host=#{mysql_host} --port=#{mysql_port} #{database} | gzip > #{archive_name}" puts commandline puts `#{commandline}` TempArchive.new(archive_name) end end end end