20 05 2008

Capistrano i backup bazy

Backup produkcyjnej bazy danych za pomoca capistrano:


Kod:


namespace :mysql do
  desc 'Backup production database'
  task :backup do
    filename = "#{application}.dump.#{Time.new.strftime('%Y-%m-%d_%H:%M:%S')}.sql.bz2"
    text = capture "cat #{deploy_to}/current/config/database.yml"

    yaml = YAML::load(ERB.new(text).result)['production']
    username, password, database = yaml['username'], yaml['password'], yaml['database']

    on_rollback { run "rm #{filename}" }
    run "mysqldump -u #{username} -p #{database} | bzip2 -c > #{filename}" do |ch, stream, out|
      ch.send_data "#{password}\n" if out =~ /^Enter password:/
    end

    system "[ -d backups ] || mkdir backups "
    download filename, "backups/#{filename}", :via => :scp
    run "rm #{filename}"
  end
end

Przykład działania:

$ cap mysql:backup
  * executing `mysql:backup'
  * executing "cat /var/www/apps/blogmd6/current/config/database.yml" 
    servers: ["md6.org"]
    [md6.org] executing command
    command finished
  * executing "mysqldump -u puszek -p blog | bzip2 -c > blogmd6.dump.2008-05-20_23:24:32.sql.bz2" 
    servers: ["md6.org"]
    [md6.org] executing command
    command finished
    servers: ["md6.org"]
 ** scp download blogmd6.dump.2008-05-20_23:24:32.sql.bz2 -> backups/blogmd6.dump.2008-05-20_23:24:32.sql.bz2
    [md6.org] backups/blogmd6.dump.2008-05-20_23:24:32.sql.bz2
  * scp download complete
  * executing "rm blogmd6.dump.2008-05-20_23:24:32.sql.bz2" 
    servers: ["md6.org"]
    [md6.org] executing command
    command finished

Backup bazy znajdziemy w backups/blogmd6.dump.2008-05-20_23:24:32.sql.bz2


* - Pola wymagane


simple_captcha.jpg (*)