class ServerBackups::MysqlRestore

Constants

ALL_DATABASES
ETC_TIMEZONE

Public Class Methods

all_databases(config_file, working_dir) click to toggle source
# File lib/server_backups/mysql_restore.rb, line 66
def all_databases(config_file, working_dir)
    MysqlBackup.new(config_file, working_dir, 'daily', 'mysql').all_databases
end
new(config_file, working_dir, restore_point, database) click to toggle source
Calls superclass method
# File lib/server_backups/mysql_restore.rb, line 9
def initialize(config_file, working_dir, restore_point, database)
    @database = database
    super config_file, working_dir, restore_point
end
restore(config_file, working_dir, restore_point, database) click to toggle source
# File lib/server_backups/mysql_restore.rb, line 57
def restore(config_file, working_dir, restore_point, database)
    return new(config_file, working_dir, restore_point, database).do_restore \
        if database != ALL_DATABASES

    all_databases(config_file, working_dir).each do |db_name|
        new(config_file, working_dir, restore_point, db_name).do_restore
    end
end

Public Instance Methods

do_restore() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 35
def do_restore
    full_backup_file.get response_target: (restore_script_path + '.gz')
    system "gunzip #{restore_script_path}.gz"

    incremental_backups.each do |s3object|
        file = Tempfile.new('foo')
        begin
            s3object.get response_target: file
            file.close
            system config.mysqlbinlog_bin + ' ' + file.path + \
                   " --stop-datetime='#{formatted_restore_point_in_system_time_zone}'" \
                   " --database=#{database} >> " + restore_script_path
        ensure
            file.close
            file.unlink # deletes the temp file
        end
    end

    execute_script restore_script_path
end
formatted_restore_point_in_system_time_zone() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 30
def formatted_restore_point_in_system_time_zone
    restore_point.in_time_zone(config.system_time_zone) \
                 .strftime('%Y-%m-%d %H:%M:%S')
end
full_backup_file() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 14
def full_backup_file
    full_backup_prefix = File.join(config.prefix, 'mysql_backup', database)
    s3.get_ordered_collection(full_backup_prefix).full_backup_for(restore_point)
end
incremental_backups() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 19
def incremental_backups
    incr_backup_prefix = File.join(config.prefix, 'mysql_backup')
    s3.get_ordered_collection(incr_backup_prefix).incremental_backups_for(restore_point)
end
restore_script_path() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 24
def restore_script_path
    File.join(working_dir, "#{database}.sql")
end

Private Instance Methods

cli_options() click to toggle source
# File lib/server_backups/mysql_restore.rb, line 73
def cli_options
    cmd = config.password.blank? ? '' : " -p'#{config.password}' "
    cmd + " -u'#{config.user}' " + database
end
execute_script(path) click to toggle source
# File lib/server_backups/mysql_restore.rb, line 78
def execute_script(path)
    cmd = "#{config.mysql_bin} --silent --skip-column-names #{cli_options}"
    logger.debug "Executing raw SQL against #{ database}\n#{cmd}"
    output = `#{cmd} < #{path}`
    logger.debug "Returned #{$CHILD_STATUS.inspect}. STDOUT was:\n#{output}"
    output.split("\n") unless output.blank?
end