アインシュタインの電話番号
2011.02.24
HerokuでDBのデータを自動でバックアップする

昨日のHerokuのDBバックアップ記事をベースに、Herokuのcronを使って自動でバックアップを取る方法(gem)があるので試してみる。

cronでDBのバックアップを自動化

前提として、cronアドオンが有効になっている必要がある。なってなければ、以下のコマンドを実行して有効化する。

$ heroku addons:add cron:daily

そして、以下のgemを使うと、HerokuのcronでDBのバックアップを自動化してくれる。

ddollar/heroku_backup_task - GitHub

まず、Gemfile に上記のgemを追加して、bundle installする。

gem 'heroku_backup_task'

そして、Rakefileのcronタスクで、先ほどのheroku_backup_taskライブラリを実行するコードを追加する。

require 'heroku_backup_task'
task :cron do
  HerokuBackupTask.execute
end

これでHerokuにpushすれば、定期的(無料版cronなら1日1回)に古いほうを捨てて新しいバックアップを取ってくれる。念のため手動でcronを発動して確認すると、

$ heroku pgbackups --app heroku-hello-world
ID   | Backup Time         | Size   | Database
b002 | 2011/02/22 05:29.41 | 23.6KB | SHARED_DATABASE_URL
b003 | 2011/02/22 05:33.22 | 23.6KB | SHARED_DATABASE_URL
$ heroku rake cron --app heroku-hello-world
(in /app/435b605b-2a16-40c7-9cb5-e5a93eea6749/home)
[Tue Feb 22 06:10:00 -0800 2011] starting heroku backup task
[Tue Feb 22 06:10:00 -0800 2011] backing up: DATABASE_URL
$ heroku pgbackups --app heroku-hello-world
ID   | Backup Time         | Size   | Database
b003 | 2011/02/22 05:33.22 | 23.6KB | SHARED_DATABASE_URL
b004 | 2011/02/22 06:10.00 | 23.6KB | DATABASE_URL

ちゃんとb002が消えてb004が生成されてるね。


herokuでデータベースのバックアップ(pgbackups)を自動化する - nabehiro Try and Error Automating pgbackups - Heroku | Google Groupsでは、先日リリースされたHeroku PG Bac... - Sooey