Rake任务备份和恢复数据库

Omi*_*gar 8 database ruby-on-rails

我正在开发一个Rails项目,有时候我会在家里编程,有时也会在工作中编程.在我的开发过程中,我将数据添加到数据库中,我真的需要一种在家和工作中同步数据库的方法.

我正在考虑在Rails应用程序中备份/恢复整个数据库的Rake任务.
反正有吗?

Ank*_*itG 16

写一个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
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个很好的解决方案,作为额外的奖励,它可以从database.yml文件中读取用户名/密码. (3认同)
  • 恢复任务的唯一问题是mysqldump为每个表写一个`DROP TABLE`然后`CREATE TABLE ...`.如果你写的添加表,然后运行'耙分贝迁移:restore`而不必正确迁移下来,额外的表不会被删除(因为他们不会被mysqldump的写入).因此,如果要进行"真正"还原,则应首先删除所有现有表,然后加载.sql文件. (3认同)

MrT*_*rus 7

我使用了将数据库转储到特定位置的脚本,并使用了第二个脚本来提取转储并使用它来还原指定的数据库。通过将其放置在schedule.rb文件中,我使用了everever gem来安排每日备份(通过调用第一个脚本):

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

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

pg_dump -F t -U username -f file_location<timestamp>.dat database_name
Run Code Online (Sandbox Code Playgroud)

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

pg_restore -U username -O -x -d database_name_new path/to/file
Run Code Online (Sandbox Code Playgroud)

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