Backup mongodb on Heroku and push it to S3 or FTP with cron task.
heroku-mongo-backup does:
Why not mongodump command?
mongodump command is not available on Heroku side. If you don't want to setup third party backup service for every project heroku-mongo-backup may be helpful.
For mongoid 4 add to the Gemfile: gem "heroku-mongo-backup", github: 'alexkravets/heroku-mongo-backup', branch: 'mongoid4'
, for the rest of mongoid versions add gem "heroku-mongo-backup"
- if everything's okay rake -T
command should show rake mongo:backup
rake tasks.
For S3 support heroku-mongo-backup requires s3
or aws-s3
or fog
library. One of those should be in Gemfile
, if you don't care add fog
it's seems to be the most advanced.
Configure heroku scheduler to run mongo:backup
rake task. Or if cron is used add backup task to /lib/tasks/cron.rake
file:
desc "This task is called by the Heroku cron add-on"
task :cron => :environment do
Rake::Task['mongo:backup'].invoke
end
Set Heroku environment variables:
heroku config:add S3_BACKUPS_BUCKET=_value_ S3_KEY_ID=_value_ S3_SECRET_KEY=_value_ MONGO_URL=_value_
On MONGO_URL place anyone of these is assaptable: MONGOHQ_URL or MONGOLAB_URI.
For FTP set these variables:
heroku config:add UPLOAD_TYPE=ftp FTP_HOST=_host_ FTP_PASSWORD=_pass_ FTP_USERNAME=_user_
heroku run rake mongo:backup
If you want to automatically remove old backup files pass MAX_BACKUPS
parameter to the rake command:
heroku run rake mongo:backup MAX_BACKUPS=7
If you're uploading to S3, backup files will be stored as backups/YYYY-MM-DD_hh-mm-ss.gz
by default. To change the directory name, pass in the S3_BACKUP_DIR
parameter:
heroku run rake mongo:backup S3_BACKUP_DIR=daily
daily/backup-file-name.gz
instead of backups/backup-file-name.gz
.Restore from backup:
heroku run rake mongo:restore FILE=backup-file-name.gz
If you want to restore from local file run:
rake mongo:restore LOCAL=/absolute/path/to/<backup-file.gz>
For Rails 2 add this to your Rakefile to import rake tasks:
import File.expand_path(File.join(Gem.datadir('heroku-mongo-backup'), '..', '..', 'lib', 'tasks', 'heroku_mongo_backup.rake'))