8

我正在做一个 Rails 项目,有时我在家里编程,有时在工作中。在我的开发过程中,我向数据库中添加数据,我确实需要一种方法来同步家庭和工作中的数据库。

我正在考虑在 Rails 应用程序中备份/恢复整个数据库的 Rake 任务。
有没有办法做到这一点?

4

2 回答 2

17

写一个 rake 任务:

namespace :db do
  task :backup do
    system "mysqldump --opt --user=root --password rose userdetails> xyz.sql"
  end

  task :restore do
    system "mysqldump --user=root --password  < xyz.sql"
  end
end

通过rake db:backup您将获得可以提交到 git/svn 的 sql,并且一旦您在家工作以恢复拉取并运行rake db:restore

于 2012-07-25T18:36:46.980 回答
7

我使用一个脚本将数据库转储到特定位置,第二个脚本获取转储并使用它来恢复指定的数据库。我使用 When gem 来安排每日备份(通过调用第一个脚本),方法是将其放入 schedule.rb 文件中:

  every :day, :at => "05:00" do
    command "/var/www/current/script/db_backup.sh -n #{@db_name}"
  end

脚本的确切内容取决于您使用的数据库。当我使用 postgreSQL 时,备份脚本在确定转储的正确位置后,运行 pg_dump:

pg_dump -F t -U username -f file_location<timestamp>.dat database_name

我用来将生产备份复制到本地数据库进行测试的“恢复”脚本使用 pg_restore:

pg_restore -U username -O -x -d database_name_new path/to/file

如果您使用的是其他数据库,这些工具显然会有所不同,但大多数数据库都支持某种形式的备份和恢复。

于 2012-07-25T18:31:16.670 回答