db_backups

A Command Line Interface to DB backups (using backup gem) stored in Rackspace CloudFiles

Designed for internal usage for our rails apps and their mysql backups, but could be driven in a more generic direction if anyone external was interested.

Setup:

Locomote only:
git clone git@github.com:locomote/config.git ~/.loco_config && ln -s ~/.loco_config/fogrc ~/.fog

or for everyone else:

echo "default:\n  rackspace_username: ${RACKSPACE_USERNAME}\n  rackspace_api_key: ${RACKSPACE_API_KEY}" > ~/.fog

Usage:

To load the latest production database to your local dev database:
bundle exec db_backups load
Loading backup <#DbBackup "foo.production.20130327023959.sql" size=245760> into database foo_development ... DONE
To list all the staging backups:
bundle exec db_backups -estaging index
+---------+---------------------------+----------------+
|              Db Backups (foo - staging)              |
+---------+---------------------------+----------------+
|         | last_modified             | content_length |
+---------+---------------------------+----------------+
| 0       | 2013-03-25 05:56:36 +1100 | 245760         |
| 1       | 2013-03-25 06:16:17 +1100 | 245760         |
| 2       | 2013-03-25 23:52:12 +1100 | 245760         |
| 3       | 2013-03-26 12:06:25 +1100 | 245760         |
| 4       | 2013-03-27 02:39:59 +1100 | 245760         |
+---------+---------------------------+----------------+
To get the backup "2" in the staging list:
bundle exec db_backups -estaging get 2

(NB. this cats the sql file. ie. handy for piping to another command, but if you want a copy of it use retreive ...)

To actually retrieve the backup "1" in the staging list:
bundle exec db_backups -estaging retrieve 1
Retrieving backup foo.staging.20130325061617.sql ... DONE

(ie. retrieve and save the backup file to disk)

To load the latest uat database into staging:
ssh foo-staging 'cd foo/current; APP_ENV=staging bundle exec db_backups -euat load'

(ie. make sure to set the APP_ENV env var correctly)

NB. The retrieve, get and load commands all take the index number as an argument, but default to the last one if no argument is given.