You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
kolaente 96d61fd6e0
feat: add support for labels to discover additional containers
3 days ago
.drone.yml feat: add drone config 8 months ago
.gitignore Add postgres dumper 12 months ago
Dockerfile feat: scratch docker image 8 months ago
LICENSE chore: add license 8 months ago
README.md feat: add support for labels to discover additional containers 3 days ago
cleanup.go feat: cleanup old backups 8 months ago
client.go Add methods to get containers 12 months ago
config.go feat: change the backup date format to make sure the backups sort properly 7 months ago
dump.go feat: add support for labels to discover additional containers 3 days ago
dump_mysql.go chore: use log everywhere 8 months ago
dump_mysql_test.go Add tests to build mysql args 12 months ago
dump_postgres.go chore: use log everywhere 8 months ago
dump_postgres_test.go feat: move running the actual dump command to the db container 8 months ago
dump_test.go Add test for determining the container dumper type 12 months ago
go.mod feat: replace interval with a proper cron schedule 8 months ago
go.sum feat: replace interval with a proper cron schedule 8 months ago
helper.go Add dump helpers 12 months ago
main.go fix: cron not running in foreground 7 months ago
save.go feat: restructure writing to the file 8 months ago
store.go feat: remove old containers 8 months ago

README.md

Zero-Fuss Docker Database Backup

Build Status

A simple tool to create backup of all databases on a host. Supports postgres and mysql/mariadb.

Successor to this script.

Usage

Simply point it at your docker socket, mount a backup volume and be done:

docker run -v $PWD/backups:/backups -v /var/run/docker.sock:/var/run/docker.sock kolaente/db-backup

The tool will find all database containers running an official mysql, mariadb or postgres image and create backups of them periodically. It will also discover new containers as they are started and won't try to back up containers which have gone away.

When running, all backups for the current run are time-stamped into a sub folder of the backup directory (see below).

Using labels

To make the backup tool discover other non-offical containers as well you can add the label de.kolaente.db-backup to any container with a value of mysql or postgres to treat it as a mysql or postgres container.

Docker Compose

If you're running docker-compose, you can use a setup similar to the following compose file to run the backup:

version: '2'
services:
  backup:
    image: kolaente/db-backup
    restart: unless-stopped
    volumes:
      - ./backups:/backups
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock

Config

All config is done with environment variables.

BACKUP_FOLDER

Where all backup files will be stored.

Default: /backups

BACKUP_SCHEDULE

The cron schedule at which the backup job runs, using the common unix cron syntax.

Check out crontab.dev for a nice explanation of the schedule.

Default: 0 */6 * * * (every 6 hours)

BACKUP_MAX

How many backups to keep. If more backups are stored in the backup folder, the oldest one will be removed until there are only as many as this config variable.

Default: 12

Building from source

This project uses go modules, so you'll need at least go 1.11 to compile it.

Simply run

go build .

to build the binary.