class ServerBackups::MysqlIncrementalBackup
Constants
- REMOTE_FILENAME_REGEX
def parse_remote_binlog_filename(file)
filename = File.basename(file.key) prefix, index, timestamp = REMOTE_FILENAME_REGEX.match(filename).captures { key: file.key, file: file, prefix: prefix, index: index, timestamp: timestamp, datetime: Time.zone.strptime(timestamp, TIMESTAMP_FORMAT) }
end
Public Class Methods
new(config_file, working_directory, database_name)
click to toggle source
Calls superclass method
ServerBackups::MysqlBackup::new
# File lib/server_backups/mysql_incremental_backup.rb, line 5 def initialize(config_file, working_directory, database_name) database_name = 'mysql' if database_name == 'all' super(config_file, working_directory, :incremental, database_name) end
Public Instance Methods
do_backup()
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 22 def do_backup load_resources flush_logs each_bin_log do |file| index = BinlogFilename.new(file).log_index next if index.in?(already_stored_log_indexes) backup_single_bin_log(file) end end
each_bin_log() { |log_file| ... }
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 40 def each_bin_log # execute 'flush logs' logs = Dir.glob("#{config.bin_log}.[0-9]*").sort_by { |f| f[/\d+/].to_i } logs_to_backup = logs[0..-2] # all logs except the last, which is in use logs_to_backup.each do |log_file| yield log_file end end
flush_logs()
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 36 def flush_logs execute_sql('flush logs;') end
s3_prefix()
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 32 def s3_prefix File.join(config.prefix, 'mysql_backup', 'incremental', '/') end
Private Instance Methods
already_stored_log_indexes()
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 71 def already_stored_log_indexes remote_bin_logs.map do |s3object| _, index = REMOTE_FILENAME_REGEX.match(s3object.key).captures index end end
backup_single_bin_log(file)
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 82 def backup_single_bin_log(file) logger.debug "Backing up #{file}." dest_filename = File.basename(file) + '.' + timestamp logger.info "Storing #{file} to #{dest_filename}" s3.save file, File.join(s3_prefix, dest_filename) end
remote_bin_logs()
click to toggle source
# File lib/server_backups/mysql_incremental_backup.rb, line 78 def remote_bin_logs s3.bucket.objects(prefix: s3_prefix) end