Skip to content

ShadowPeo/docker-db-auto-backup

 
 

Repository files navigation

docker-db-auto-backup

Modified from original script to add further functionality, intention is to ultimatly push it back upstream or build this container via CI but I need to learn that further features are going to be implemented as per the ToDo Below

A script to automatically back up all databases running under docker on a host, with optional compression support.

Supported databases

  • MariaDB
  • MySQL
  • PostgreSQL
  • Redis

Installation

This container requires access to the docker socket. This can be done either by mounting /var/lib/docker.sock, or using a HTTP proxy to provide it through $DOCKER_HOST.

Mount your backup directory as /var/backups (or override $BACKUP_DIR). Backups will be saved here based on the name of the container. Backups are not dated or compressed.

Backups run daily at midnight. To change this, add a cron-style schedule to $SCHEDULE. For more information on the format of the cron strings, please see the croniter documentation on PyPI.

Success hooks

When backups are completed successfully, a request can be made to the URL defined in $SUCCESS_HOOK_URL. By default, a GET request is made. To include logs, also set $INCLUDE_LOGS to a non-empty value, which sends a POST request instead with helpful details in the body.

Note: Previous versions also supported $HEALTHCHECKS_ID, $HEALTHCHECKS_HOST and $UPTIME_KUMA_URL, or native support for healthchecks.io and Uptime Kuma respectively. These are all still supported, however $SUCCESS_HOOK_URL is preferred.

Compression

Files are backed up uncompressed by default, on the assumption a snapshotting or native compressed filesystem is being used (eg ZFS). To enable compression, set $COMPRESSION to one of the supported algorithms:

  • gzip
  • lzma / xz
  • bz2
  • plain (no compression - the default)

Example docker-compose.yml

version: "2.3"

services:
  backup:
    image: ghcr.io/realorangeone/db-auto-backup:latest
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./backups:/var/backups
    environment:
      - SUCCESS_HOOK_URL=https://hc-ping.com/1234
      - INCLUDE_LOGS=true

Oneshot

You may want to use this container to run backups just once, rather than on a schedule. To achieve this, set $SCHEDULE to an empty string, and the backup will run just once. This may be useful in conjunction with an external scheduler.

ToDo

These are listed in the order of priority

  • Update MariaDB/MySQL Code to handle single database
  • Allow for backup versioning/rotation with DAYS/MONTHS/QUARTERS/YEARS
  • Allow for container inclusion/exclusion through labels, by default backup unless disabled will be set, but can be reversed (considering)
  • Allow for DB container label to specify a backup healthcheck webhook to ping (considering)
  • Update MariaDB/MySQL Code to handle blank root passwords (considering)
  • Allow for use of Apprise API to send notifications about backup process (considering)

About

A script to automatically back up all databases running under docker on a host

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages

  • Python 91.9%
  • Shell 5.3%
  • Dockerfile 2.8%