Making DB backups with Ruby
The past week I mounted a DB backup system, for a couple of Ruby web apps (Rails and Sinatra), using the Backup gem. I found the process pretty straightforward, so I decided to share my experience.
backup gem provides a very nice set of features:
- Databases support: MySQL, MongoDB, PostgreSQL, Redis …
- Storages: Amazon S3, Local, RSync, Dropbox …
- Notifiers: Email, Twitter, Hipchat …
- Friendly DSL
- The plugin is totally independent to Rails, so you can use it for other applications.
Backup model example (MySQL, Amazon, Gzip and email notifications):
Model.new(:my_backup, 'My backup description') do database MySQL do |db| db.name = "database_name" db.username = "username" db.password = "pass" db.host = "localhost" db.port = 3306 end store_with S3 do |s3| s3.access_key_id = "access_key_id" s3.secret_access_key = "secret_access_key" s3.bucket = "bucket_name" s3.path = "path/to/your/backups" end compress_with Gzip notify_by Mail do |mail| mail.on_success = true mail.on_warning = true mail.on_failure = true mail.from = "firstname.lastname@example.org" mail.to = "email@example.com" mail.address = "smtp.gmail.com" mail.port = 587 mail.domain = "your.host.name" mail.user_name = "firstname.lastname@example.org" mail.password = "pass" mail.authentication = "plain" end end
Perform the backup with the following command:
> backup perform --trigger my_backup
You can also schedule your backups with a cron job (for example using the
whenever gem) and you’ll achieve a simple and effective solution:
every 1.day, :at => '1:00 am' do command "backup perform --trigger my_backup" end
Hope this can help you!