Class: MysqlBackup::Librarian
- Inherits:
-
Object
- Object
- MysqlBackup::Librarian
- Includes:
- NamedArguments
- Defined in:
- lib/mysql_backup/librarian.rb,
lib/mysql_backup/librarian/backup.rb,
lib/mysql_backup/librarian/backup_collection.rb
Overview
- backup_data_files
-
Save the binary backups
- backup_mysqldump
-
Send the mysqldump to s3
- backup_binary_logs
-
Send the logs to S3
Defined Under Namespace
Classes: Backup, BackupCollection
Instance Attribute Summary collapse
-
#access_key_id ⇒ Object
S3 parameters.
-
#bucket ⇒ Object
S3 parameters.
-
#connection ⇒ Object
The connection to MySQL.
-
#db ⇒ Object
MySQL connection parameters.
-
#flag ⇒ Object
MySQL connection parameters.
-
#host ⇒ Object
MySQL connection parameters.
-
#log ⇒ Object
The logger.
- #mysql_server ⇒ Object
-
#password ⇒ Object
MySQL connection parameters.
-
#port ⇒ Object
MySQL connection parameters.
-
#secret_access_key ⇒ Object
S3 parameters.
-
#sock ⇒ Object
MySQL connection parameters.
-
#storage ⇒ Object
A MysqlBackup::Storage object.
-
#user ⇒ Object
MySQL connection parameters.
Instance Method Summary collapse
- #backup_binary_logs ⇒ Object
- #backup_data_files ⇒ Object
- #backup_mysqldump ⇒ Object
- #create_backup_group_collection_from_storage ⇒ Object
- #create_connection ⇒ Object
- #find_group(f) ⇒ Object
- #get(f, directory) ⇒ Object
-
#get_backup(f, &block) ⇒ Object
Always call this with a block that will do something with the raw data retrieved from S3.
- #get_full_binary(f, destination_dir = '/tmp') ⇒ Object
- #get_logs(destination_dir = '/tmp') ⇒ Object
- #get_mysqldump(f, destination_dir = '/tmp') ⇒ Object
-
#initialize(args = {}) ⇒ Librarian
constructor
Takes a required argument to specify the location of the log files:.
- #innodb_files ⇒ Object
- #log_files ⇒ Object
- #ls(klass = Object) ⇒ Object
- #myisam_files ⇒ Object
- #rm(backup_name) ⇒ Object
- #run_cmd(cmd) ⇒ Object
Constructor Details
#initialize(args = {}) ⇒ Librarian
Takes a required argument to specify the location of the log files:
:log_bin_dir => '/var/lib/mysql'
Takes required arguments for S3:
:access_key_id => 'abc',
:secret_access_key => '123'
:bucket => 'name_of_the_backup_bucket'
Takes these arguments for the connection to MySQL:
:host
:user
:password
:db
:port
:sock
:flag
Many installations just need to specify :host
and :user
.
58 59 60 |
# File 'lib/mysql_backup/librarian.rb', line 58 def initialize args = {} super end |
Instance Attribute Details
#access_key_id ⇒ Object
S3 parameters
35 36 37 |
# File 'lib/mysql_backup/librarian.rb', line 35 def access_key_id @access_key_id end |
#bucket ⇒ Object
S3 parameters
35 36 37 |
# File 'lib/mysql_backup/librarian.rb', line 35 def bucket @bucket end |
#connection ⇒ Object
The connection to MySQL
29 30 31 |
# File 'lib/mysql_backup/librarian.rb', line 29 def connection @connection end |
#db ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def db @db end |
#flag ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def flag @flag end |
#host ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def host @host end |
#log ⇒ Object
The logger. Default is to log via STDERR.
23 24 25 |
# File 'lib/mysql_backup/librarian.rb', line 23 def log @log end |
#mysql_server ⇒ Object
94 95 96 |
# File 'lib/mysql_backup/librarian.rb', line 94 def mysql_server @mysql_server ||= MysqlBackup::Server.new :connection => create_connection, :log => log end |
#password ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def password @password end |
#port ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def port @port end |
#secret_access_key ⇒ Object
S3 parameters
35 36 37 |
# File 'lib/mysql_backup/librarian.rb', line 35 def secret_access_key @secret_access_key end |
#sock ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def sock @sock end |
#storage ⇒ Object
A MysqlBackup::Storage object.
26 27 28 |
# File 'lib/mysql_backup/librarian.rb', line 26 def storage @storage end |
#user ⇒ Object
MySQL connection parameters
20 21 22 |
# File 'lib/mysql_backup/librarian.rb', line 20 def user @user end |
Instance Method Details
#backup_binary_logs ⇒ Object
75 76 77 78 79 80 |
# File 'lib/mysql_backup/librarian.rb', line 75 def backup_binary_logs logs_obj = mysql_server.create_logs_obj logs_obj.save do |args| storage.conditional_save args end end |
#backup_data_files ⇒ Object
62 63 64 65 66 |
# File 'lib/mysql_backup/librarian.rb', line 62 def backup_data_files MysqlBackup::Entity::Files.create_tar_files :log => log, :mysql_server => mysql_server, :mysql_files => [innodb_files, myisam_files] do |args| storage.conditional_save args end end |
#backup_mysqldump ⇒ Object
68 69 70 71 72 73 |
# File 'lib/mysql_backup/librarian.rb', line 68 def backup_mysqldump m = MysqlBackup::Entity::Mysqldump.new :log => log m.create do |args| storage.conditional_save args end end |
#create_backup_group_collection_from_storage ⇒ Object
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/mysql_backup/librarian.rb', line 98 def create_backup_group_collection_from_storage unless @backups c = MysqlBackup::Librarian::BackupCollection.new storage.yield_identifiers do |i| c.add_identifier i end @backups = c end @backups end |
#create_connection ⇒ Object
173 174 175 |
# File 'lib/mysql_backup/librarian.rb', line 173 def create_connection @connection ||= Mysql.connect(@host, @user, @pass, @db, @port, @sock, @flag) end |
#find_group(f) ⇒ Object
169 170 171 |
# File 'lib/mysql_backup/librarian.rb', line 169 def find_group f create_backup_group_collection_from_storage.find_group f end |
#get(f, directory) ⇒ Object
124 125 126 127 128 129 130 131 |
# File 'lib/mysql_backup/librarian.rb', line 124 def get f, directory case f when /^full:type_binary/ get_full_binary f, directory when /^full:type_mysqldump/ get_mysqldump f, directory end end |
#get_backup(f, &block) ⇒ Object
Always call this with a block that will do something with the raw data retrieved from S3.
161 162 163 164 165 166 167 |
# File 'lib/mysql_backup/librarian.rb', line 161 def get_backup f, &block b = find_group f raise RuntimeError, "Failed to find backup for #{f}" unless b if b storage.retrieve_backup_and_then_yield_file(b, &block) end end |
#get_full_binary(f, destination_dir = '/tmp') ⇒ Object
133 134 135 136 137 |
# File 'lib/mysql_backup/librarian.rb', line 133 def get_full_binary f, destination_dir = '/tmp' get_backup f do |tempfile| run_cmd "( cd #{destination_dir}; zcat #{tempfile.path} | tar xf - )" end end |
#get_logs(destination_dir = '/tmp') ⇒ Object
145 146 147 148 149 150 151 152 |
# File 'lib/mysql_backup/librarian.rb', line 145 def get_logs destination_dir = '/tmp' create_backup_group_collection_from_storage.each_log do |g| log && log.info("Looking at backup #{g.to_s}") storage.retrieve_backup_and_then_yield_file g do |tempfile| run_cmd "( cd #{destination_dir}; zcat #{tempfile.path} | tar xf - )" end end end |
#get_mysqldump(f, destination_dir = '/tmp') ⇒ Object
139 140 141 142 143 |
# File 'lib/mysql_backup/librarian.rb', line 139 def get_mysqldump f, destination_dir = '/tmp' get_backup f do |tempfile| run_cmd "( cd #{destination_dir}; zcat #{tempfile.path} > #{f})" end end |
#innodb_files ⇒ Object
82 83 84 |
# File 'lib/mysql_backup/librarian.rb', line 82 def innodb_files @innodb_files ||= mysql_server.create_innodb_files_obj end |
#log_files ⇒ Object
90 91 92 |
# File 'lib/mysql_backup/librarian.rb', line 90 def log_files @log_files ||= mysql_server.create_logs_obj end |
#ls(klass = Object) ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/mysql_backup/librarian.rb', line 109 def ls klass = Object result = [] create_backup_group_collection_from_storage.each_group(klass) do |g| result << g.to_s end result end |
#myisam_files ⇒ Object
86 87 88 |
# File 'lib/mysql_backup/librarian.rb', line 86 def myisam_files @myisam_files ||= mysql_server.create_myisam_files_obj end |
#rm(backup_name) ⇒ Object
117 118 119 120 121 122 |
# File 'lib/mysql_backup/librarian.rb', line 117 def rm backup_name g = find_group backup_name g.each_identifier do |i| storage.rm i end end |
#run_cmd(cmd) ⇒ Object
154 155 156 157 |
# File 'lib/mysql_backup/librarian.rb', line 154 def run_cmd cmd log && log.debug("Run command: #{cmd}") system cmd end |