Backup mongodb on Heroku and push it to S3 or FTP with cron task.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

heroku-mongo-backup — backup mongodb on Heroku and push it to S3 or FTP storage

heroku-mongo-backup does:

  1. Backup mongodb collections to one file;
  2. Compress backup file with gzip;
  3. Push backup to the specified S3 bucket or FTP server;

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

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_

Rake Commands

  • 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
  • Backup files would then be stored as 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'))

Gem Contributors

  1. alexkravets - - gem itself with S3 support
  2. matyi - FTP support
  3. stefl - - Rails is not required for production
  4. moonhouse - - default config improvement
  5. wolfpakz - Rails2 support
  6. solacreative - Max backups feature for aws/s3 and s3 gems
  7. aarti - minor fixes
  8. strayduy - Configurable S3 directory name