4

我正在使用带有暂存和生产服务器的 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

4 回答 4

3

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

mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname
于 2011-09-26T17:05:13.803 回答
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"
于 2012-04-12T16:54:58.167 回答
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

于 2019-10-02T07:48:06.660 回答