将生产数据库复制到分段capistrano

时间:2010-11-03 22:07:07

标签: ruby-on-rails capistrano production staging

我正在使用rails和capistrano与登台和生产服务器。我需要能够在部署到登台时将生产数据库复制到登台数据库。有没有一种简单的方法可以实现这一目标?

我想过用mysql做这件事,比如:

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

(我没有测试过这个顺便说一句,所以不确定它是否会起作用) 但是如果有另一种方式会更容易/更好。

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

这也是一种快速的方法。这使用SSH远程命令和管道来避免临时文件。

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

答案 1 :(得分:3)

这是我的部署代码段:

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"

答案 2 :(得分:2)

答案 3 :(得分:0)

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

这可能不起作用。至少它不适用于PostgreSQL。

  1. 您的登台应用程序已锁定数据库,因此您 不能删除它
  2. 虽然某些表被锁定,但您仍然 覆盖休息表。因此您的数据库已损坏

以上文章的工作链接

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