class Backup::Tasks::MySQL

Attributes

credentials[R]
host[R]
options[R]

Public Class Methods

new(host:, credentials:, databases: :all, **options) click to toggle source
# File lib/backup-agent/tasks/mysql.rb, line 8
def initialize(host:, credentials:, databases: :all, **options)
  @host        = host
  @credentials = credentials
  @databases   = databases
  @options     = options
end

Public Instance Methods

databases() click to toggle source
# File lib/backup-agent/tasks/mysql.rb, line 30
def databases
  if @databases == :all
    command("mysql", *credentials.to_options, *host_options, "-e", "SHOW DATABASES;")
        .split("\n")
        .reject { |el| el =~ /database|information_schema|mysql|performance_schema|test|phpmyadmin|pma|sys/i }
  else
    [@databases].flatten.compact
  end
end
dump_options() click to toggle source
# File lib/backup-agent/tasks/mysql.rb, line 40
def dump_options
  @options.fetch(:dump_options) do
    %W( --add-drop-table
        --add-locks
        --allow-keywords
        --comments
        --complete-insert
        --create-options
        --disable-keys
        --extended-insert
        --lock-tables
        --quick
        --quote-names
        --routines
        --set-charset
        --dump-date
        --tz-utc
        --verbose )
  end
end
host_options() click to toggle source
# File lib/backup-agent/tasks/mysql.rb, line 61
def host_options
  ["--host=#{@host}"]
end
perform(storage) click to toggle source
# File lib/backup-agent/tasks/mysql.rb, line 15
def perform(storage)
  databases.map do |db|
    Tempfile.open do |tempfile|
      command("mysqldump", *credentials.to_options, *host_options, *dump_options, "--databases", db).tap do |dump_sql|
        stdin dump_sql do
          command("xz", "--compress", "-9", "--format=xz", "--keep", "--threads=0", "--verbose", "--check=sha256").tap do |dump_xz|
            tempfile.write(dump_xz)
            storage.store(construct_filename(db, ".sql.xz"), tempfile.path)
          end
        end
      end
    end
  end
end