项目数据备份

April 11, 2013 22:00


以前,事情多,也略急,小项目也懒的去备份数据了,终于在昨天悲剧了,丢了数据了, 虽然弄丢数据的不是我,但还是因为我没有去备份数据而使的数据无法找回来了。

于是,昨天就决定今天把备份的弄好,项目部署时自动在服务器运行备份服务( 我想如果以前有这个,就不会出这事了,每次都要去服务器上写配置什么的,过懒的我懒的写。。。)

主要用到两个ruby的gem,一个backup,另一个whenever,先安装这两gem

gem 'whenever', :require => false
gem 'backup', :require => false

然后用backup在项目中生成备份的配置文件:

$ backup generate:model -t project_db --databases=mongodb,mysql --config-path=./config/backup

生成后自然就是配置backup了,可以去github上面看看说明。我们可以直接读取项目的DB配置, 然后来设置backup,这样改了DB配置后不就用再动backup了,还有就是备份的路径,用默认的或是自定, 在config/backup/models/project_db.rb中:

require 'yaml'

APP_ENV = ENV["APP_ENV"] || "development"

db_path = File.expand_path("../database.yml", Config.root_path)
db_config = YAML.load_file(db_path)[APP_ENV]

# ..
  db.name = db_config["database"]
  db.username = db_config["username"]
  db.password = db_config["password"]
#...

配置好后,运行备份测试一下:

$ backup perform -t project_db --config-path=./config/backup/config.rb

接下来就是设置定时备份了,使用插件whenever,进入项目目录,使用下列命令生成配置

$ cd /path/to/project
$ wheneverize .

将在config目录下生成配置文件schedule.rb,编辑这个文件,每天运行上面backup的备份命令:

every 1.day, :at => '1:30 am' do
  runner "APP_ENV=production backup perform -t project_db --config-path=./config/backup/config.rb"
end

然后在项目下运行whenever命令,将显示出定时运行的命令,把这个命令运行一次, 测试是否可运行

最后就是部署了,在部署脚本里判断服务器是否安装backup(不要在bundle 环境中安装), 如果没安装就安装一个,再运行whenever -i xxx,如:

which backup || (cd ~ && gem install backup)
whenever -i project_identifier

whenever -i后面的project_identifier可以自己定义一个标识,这样每次运行 whenever -i xxx时都会更新以前的xxx,如果没有就会自动创建xxx的定时任务, 如果不写的话,默认就是文件路径

在部署前也可以先备份一次,以防万一,然后也可以用这两gem来做其它的备份任务, 如文件,Log等等

Comments: