Toby Joiner
Toby Joiner

Reputation: 4376

copy production database to staging capistrano

I am using rails and capistrano with a staging and production server. I need to be able to copy the production database to the staging database when I deploy to staging. Is there an easy way to accomplish this?

I thought about doing this with mysql and something like:

before "deploy:migrate" do
  run "mysqldump -u root #{application}_production > output.sql"
  run "mysql -u root #{application}_staging < output.sql"
end

(I have not tested this btw, so not sure it would even work) but it would be easier / better if there was another way.

Thanks for any help

Upvotes: 3

Views: 5126

Answers (4)

Kitty Hawk
Kitty Hawk

Reputation: 3

mysql -e 'DROP DATABASE stag_dbname;' 
ssh prod.foo.com mysqldump -u prodsqluser

This may not works. At least it does not work with the PostgreSQL.

  1. You have your staging application locked the database so you cannot drop it
  2. While some tables are locked you will still overwrite rest tables. So you got an corrupted database

working link for the post above

https://web.archive.org/web/20160404204752/http://blog.robseaman.com/2008/12/2/production-data-to-development

Upvotes: 0

Robert
Robert

Reputation: 1946

Here's my deployment snippet:

namespace :deploy do
  task :clone_production_database, :except => { :no_release => true } do
    mysql_user = "username"
    mysql_password = "s3C_re"
    production_database = "production"
    preview_database = "preview"
    run "mysql -u#{mysql_user} -p#{mysql_password} --execute='CREATE DATABASE IF NOT EXISTS #{preview_database}';"
    run "mysqldump -u#{mysql_user} -p#{mysql_password} #{production_database} | mysql -u#{mysql_user} -p#{mysql_password} #{preview_database}"
  end
end
before "deploy:migrate", "deploy:clone_production_database"

Upvotes: 3

Andrew Hopper
Andrew Hopper

Reputation: 966

This is a quick way to do it also. This uses SSH remote commands and pipes to avoid temp files.

mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname

Upvotes: 3

Related Questions