Sha256: 1f6032a103b8cefcbd4062f07cd6de4613a016089bb0f53196a982ee740a8899

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

module Backup
  class Mysql < Backup::Base
    
    def initialize(options = {})
      super(default_options.merge(options))
      setup_paths("db/#{self.class.name.downcase.gsub('::','-')}", :gz)
    end
    
    # Initialize the process
    # Executing multiple processes
    #
    # - Make MySQL Dump
    #   Creates a MySQL dump based on the parameters provided by the user
    # - Compress
    #   Compresses the .tar file using Gzip
    # - Encrypt
    #   Encrypts the backup file
    # - Transfer
    #   Initializes the transfer to either S3 or using SSH
    # - Remove Temp Files
    #   Removes temporary files after the process is complete
    def run
      make_mysql_dump
      compress
      encrypt
      transfer
      remove_temp_files
    end

    private
      
      # Compresses the MySQL dump file and stores the compressed version inside the tmp/backups folder.
      def compress
        %x{ gzip -cv #{File.join(options[:path], options[:file])} --best > #{File.join(options[:backup_path], options[:backup_file])} }
      end
      
      # This will generate a MySQL dump based on the options the user passed in.
      # The MySQL dump will be placed (by default) in the config/db directory so it can be found
      # by the compressor.
      def make_mysql_dump
        # => /usr/local/mysql/bin/mysqldump on Mac OS X 10.6
        %x{ mysqldump --quick -u #{options[:mysql][:user]} --password='#{options[:mysql][:password]}' #{options[:mysql][:database]} > #{File.join(options[:path], options[:file])} }
      end
      
      # Set default options
      def default_options
        {:path => "#{RAILS_ROOT}/tmp/backups/db/#{self.class.name.downcase.gsub('::','-')}",
          :file => "production.sql",
          :mysql => {
            :user     => "",
            :password => "",
            :database => ""
        }}
      end
    
  end  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
backup-1.0.0 lib/backup/mysql.rb