Class: Backup::Database::MySQL

Inherits:
Base
  • Object
show all
Defined in:
lib/backup/database/mysql.rb

Defined Under Namespace

Classes: Error

Instance Attribute Summary collapse

Attributes inherited from Base

#database_id, #dump_path, #model

Instance Method Summary collapse

Methods included from Config::Helpers

included

Constructor Details

#initialize(model, database_id = nil, &block) ⇒ MySQL

Returns a new instance of MySQL.



58
59
60
61
62
63
64
# File 'lib/backup/database/mysql.rb', line 58

def initialize(model, database_id = nil, &block)
  super
  instance_eval(&block) if block_given?

  @name ||= :all
  @backup_engine ||= :mysqldump
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Backup::Config::Helpers

Instance Attribute Details

#additional_optionsObject

Additional “mysqldump” or “innobackupex (backup creation)” options



37
38
39
# File 'lib/backup/database/mysql.rb', line 37

def additional_options
  @additional_options
end

#backup_engineObject

Default is :mysqldump (which is built in MySQL and generates a textual SQL file), but can be changed to :innobackupex, which has more feasible restore times for large databases. See: www.percona.com/doc/percona-xtrabackup/



48
49
50
# File 'lib/backup/database/mysql.rb', line 48

def backup_engine
  @backup_engine
end

#hostObject

Connectivity options



20
21
22
# File 'lib/backup/database/mysql.rb', line 20

def host
  @host
end

#nameObject

Name of the database that needs to get dumped To dump all databases, set this to ‘:all` or leave blank.



12
13
14
# File 'lib/backup/database/mysql.rb', line 12

def name
  @name
end

#only_tablesObject

Tables to dump. This in only valid if ‘name` is specified. If none are given, the entire database will be dumped.



33
34
35
# File 'lib/backup/database/mysql.rb', line 33

def only_tables
  @only_tables
end

#passwordObject

Credentials for the specified database



16
17
18
# File 'lib/backup/database/mysql.rb', line 16

def password
  @password
end

#portObject

Connectivity options



20
21
22
# File 'lib/backup/database/mysql.rb', line 20

def port
  @port
end

#prepare_optionsObject

Additional innobackupex log preparation phase (“apply-logs”) options



41
42
43
# File 'lib/backup/database/mysql.rb', line 41

def prepare_options
  @prepare_options
end

#skip_tablesObject

Tables to skip while dumping the database

If ‘name` is set to :all (or not specified), these must include a database name. e.g. ’name.table’. If ‘name` is given, these may simply be table names.



28
29
30
# File 'lib/backup/database/mysql.rb', line 28

def skip_tables
  @skip_tables
end

#socketObject

Connectivity options



20
21
22
# File 'lib/backup/database/mysql.rb', line 20

def socket
  @socket
end

#sudo_userObject

If set the backup engine command block is executed as the given user



52
53
54
# File 'lib/backup/database/mysql.rb', line 52

def sudo_user
  @sudo_user
end

#usernameObject

Credentials for the specified database



16
17
18
# File 'lib/backup/database/mysql.rb', line 16

def username
  @username
end

#verboseObject

If set, do not suppress innobackupdb output (useful for debugging)



56
57
58
# File 'lib/backup/database/mysql.rb', line 56

def verbose
  @verbose
end

Instance Method Details

#perform!Object

Performs the mysqldump or innobackupex command and outputs the dump file in the dump_path using dump_filename.

<trigger>/databases/MySQL[-<database_id>].[sql|tar][.gz]


71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/backup/database/mysql.rb', line 71

def perform!
  super

  pipeline = Pipeline.new
  dump_ext = sql_backup? ? 'sql' : 'tar'

  pipeline << sudo_option(sql_backup? ? mysqldump : innobackupex)

  model.compressor.compress_with do |command, ext|
    pipeline << command
    dump_ext << ext
  end if model.compressor

  pipeline << "#{ utility(:cat) } > " +
      "'#{ File.join(dump_path, dump_filename) }.#{ dump_ext }'"

  pipeline.run
  if pipeline.success?
    log!(:finished)
  else
    raise Error, "Dump Failed!\n" + pipeline.error_messages
  end
end