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