Easily automated database dumps
This container jtilander/backup-db provides an immediate way and a scheduled way to take ascii database dumps from both mysql and postgres. These dumps have the convinient property that they are easily restorable with this container as well.
Versions
There is a regular amd64 version in latest and any 0.1 like tag. There are also an arm tag, as well as arm-0.1 version numbers suitable for raspberry pi.
Why?
The case for having the ascii SQL dumps instead of just the native file system files might be non obvious at first. The file system files are fine, but they do have race conditions and are susecptible to corruption.
The file system files are also platform dependent and possibly version dependent.
The dumps on the other hand can be transfered between architectures as well as sometimes between versions (usually upwards).
Having periodical dumps of the database can also provide snapshots that you can travel back to in need.
Assumptions
This container assumes that we have access to the global docker daemon, and we will execute commands in the target database container. It will also assume that we've got proper database credentials setup.
A good way to setup this container would be to have an instance running for each target database that you want to backup periodically.
Usage
Modes
We can run in three modes:
- backup: this will backup the target database from "db" once
- restore: this will restore the most recent database file into the host "db"
- cron: this will continiually run a backup operation ever night
If the DBTYPE is set to 'all', then we will not require type, usernames nor passwords -- we will simply obtain these through the docker containers running the databases instead. This mode is suitable for running a whole machine backup.
The mode is chosen by the command to the docker container.
Volumes
Mount point | Suggested | Description |
---|---|---|
/var/run/docker.sock | /var/run/docker.sock | Needed for docker access |
/data | /mnt/backup/databases | All the backup archives will be written / read from here |
Environment variables
Most of the functionality is controlled by the container's environment variables.
Name | Default | Description |
---|---|---|
DEBUG | 0 | Set to 1 for debug output |
HISTORY | 5 | How many snapshots to keep in a rolling fashion |
DBNAME | database_name | The target database name (mostly for mysql) to backup (not needed for all) |
USERNAME | root | Database credentials (not needed for all) |
PASSWORD | password | Database credentials (not needed for all) |
DBTYPE | mysql | Valid choices are mysql, psql, all |
PREFIX | backup | The archive files are prefixed this way |
CONTAINER | $DBTYPE | The name of the container running the database (not needed for all) |
CRONSCHEDULE | 0 * * * * | Crontab entry for when to run the periodic backup |
SENTRY_DSN | Optional reporting DSN for sentry | |
HOSTNAME | docker | The actual host we are running on (auto detect in rancher) |
Sample
The docker-compose file gives an example of launching two databases and then triggering periodic backups on these (one each minute) into a temporary directory. It should give a good idea of what is possible.