class Backup::Database::MySQL
Attributes
Additional “mysqldump” or “innobackupex (backup creation)” options
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/
Connectivity options
Name of the database that needs to get dumped To dump all databases, set this to `:all` or leave blank.
Tables to dump. This in only valid if `name` is specified. If none are given, the entire database will be dumped.
Credentials for the specified database
Connectivity options
If true (which is the default behaviour), the backup will be prepared after it has been successfuly created. This option is only valid if :backup_engine is set to :innobackupex.
Additional innobackupex log preparation phase (“apply-logs”) options
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.
Connectivity options
If set the backup engine command block is executed as the given user
Credentials for the specified database
If set, do not suppress innobackupdb output (useful for debugging)
Public Class Methods
Backup::Database::Base::new
# File lib/backup/database/mysql.rb, line 63 def initialize(model, database_id = nil, &block) super instance_eval(&block) if block_given? @name ||= :all @backup_engine ||= :mysqldump @prepare_backup = true if @prepare_backup.nil? end
Public Instance Methods
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]
Backup::Database::Base#perform!
# File lib/backup/database/mysql.rb, line 77 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
Private Instance Methods
# File lib/backup/database/mysql.rb, line 116 def connectivity_options return "--socket='#{ socket }'" if socket opts = [] opts << "--host='#{ host }'" if host opts << "--port='#{ port }'" if port opts.join(' ') end
# File lib/backup/database/mysql.rb, line 109 def credential_options opts = [] opts << "--user=#{ Shellwords.escape(username) }" if username opts << "--password=#{ Shellwords.escape(password) }" if password opts.join(' ') end
# File lib/backup/database/mysql.rb, line 148 def dump_all? name == :all end
# File lib/backup/database/mysql.rb, line 156 def innobackupex # Creation phase "#{ utility(:innobackupex) } #{ credential_options } " + "#{ connectivity_options } #{ user_options } " + "--no-timestamp #{ temp_dir } #{ quiet_option } && " + innobackupex_prepare + # Move files to tar-ed stream on stdout "#{ utility(:tar) } --remove-files -cf - " + "-C #{ File.dirname(temp_dir) } #{ File.basename(temp_dir) }" end
# File lib/backup/database/mysql.rb, line 167 def innobackupex_prepare return "" unless @prepare_backup # Log applying phase (prepare for restore) "#{ utility(:innobackupex) } --apply-log #{ temp_dir } " + "#{ user_prepare_options } #{ quiet_option } && " end
# File lib/backup/database/mysql.rb, line 103 def mysqldump "#{ utility(:mysqldump) } #{ user_options } #{ credential_options } " + "#{ connectivity_options } #{ name_option } " + "#{ tables_to_dump } #{ tables_to_skip }" end
# File lib/backup/database/mysql.rb, line 133 def name_option dump_all? ? '--all-databases' : name end
# File lib/backup/database/mysql.rb, line 182 def quiet_option verbose ? "" : " 2> /dev/null " end
# File lib/backup/database/mysql.rb, line 152 def sql_backup? backup_engine.to_sym == :mysqldump end
# File lib/backup/database/mysql.rb, line 174 def sudo_option(command_block) return command_block unless sudo_user "sudo -s -u #{ sudo_user } -- <<END_OF_SUDO\n" + "#{command_block}\n" + "END_OF_SUDO\n" end
# File lib/backup/database/mysql.rb, line 137 def tables_to_dump Array(only_tables).join(' ') unless dump_all? end
# File lib/backup/database/mysql.rb, line 141 def tables_to_skip Array(skip_tables).map do |table| table = (dump_all? || table['.']) ? table : "#{ name }.#{ table }" "--ignore-table='#{ table }'" end.join(' ') end
# File lib/backup/database/mysql.rb, line 186 def temp_dir File.join(dump_path, dump_filename + ".bkpdir") end
# File lib/backup/database/mysql.rb, line 125 def user_options Array(additional_options).join(' ') end
# File lib/backup/database/mysql.rb, line 129 def user_prepare_options Array(prepare_options).join(' ') end