Docker image to backup all your databases periodically
Find a file
2018-11-08 11:28:04 +01:00
.travis.yml use HOST and PORT for table lookup 2018-03-21 13:08:51 +01:00
backup.sh Create a link to the latest backup 2018-11-08 11:15:00 +01:00
Dockerfile Reorder Dockerfile for less layers 2018-02-12 15:43:58 +01:00
LICENSE split docker images into different repos 2017-03-27 21:16:15 +02:00
Makefile Adding Makefile for running tests via 'make test' 2017-04-08 16:50:29 +02:00
README.md Aesthetics improvements and docker-compose example 2018-11-08 11:28:04 +01:00
restore.sh Adds missing gunzip command 2017-09-07 17:18:55 +02:00
run.sh fix bash syntax accordint to shellcheck 2017-04-08 17:57:23 +02:00

Build Status

mysql-cron-backup

This docker image runs mysqldump to backup your databases periodically using cron task manager. Backups are placed in /backup so you can mount your backup docker volume in this path.

Usage:

docker container run -d \
       --env MYSQL_USER=root \
       --env MYSQL_PASS=my_password \
       --link mysql
       --volume /path/to/my/backup/folder:/backup
       fradelg/mysql-cron-backup

Variables

  • MYSQL_HOST: The host/ip of your mysql database.
  • MYSQL_PORT: The port number of your mysql database.
  • MYSQL_USER: The username of your mysql database.
  • MYSQL_PASS: The password of your mysql database.
  • MYSQL_DB: The database name to dump. Default: --all-databases.
  • MYSQLDUMP_OPTS: Command line arguments to pass to mysqldump. Example: --single-transaction.
  • CRON_TIME: The interval of cron job to run mysqldump. 0 3 * * sun by default, which is every Sunday at 03:00.
  • MAX_BACKUPS: The number of backups to keep. When reaching the limit, the old backup will be discarded. No limit by default.
  • INIT_BACKUP: If set, create a backup when the container starts.
  • INIT_RESTORE_LATEST: Ff set, restores latest backup.

If you want to make this image the perfect companion of your MySQL container, use docker-compose. You can add more services that will be able to connect to the MySQL image using the name my_mariadb, note that you only expose the port 3306 internally to the servers and not to the host:

version: "2"
services:
  mariadb:
    image: mariadb
    container_name: my_mariadb
    expose:
      - 3306
    volumes:
      # If there is not scheme, restore the last created backup (if exists)
      - ${VOLUME_PATH}/backup/latest.${DATABASE_NAME}.sql.gz:/docker-entrypoint-initdb.d/database.sql.gz
    environment:
      - MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MYSQL_DATABASE=${DATABASE_NAME}
      - MYSQL_USER=${WORDPRESS_DB_USER}
      - MYSQL_PASSWORD=${WORDPRESS_DB_PASSWORD}
    restart: unless-stopped

  mysql-cron-backup:
    image: fradelg/mysql-cron-backup
    depends_on:
      - my_mariadb
    volumes:
      - ${VOLUME_PATH}/backup:/backup
    environment:
      - MYSQL_HOST=my_mariadb
      - MYSQL_USER=root
      - MYSQL_PASS=${MARIADB_ROOT_PASSWORD}
      - MAX_BACKUPS=15
      - INIT_BACKUP=0
      # Every day at 03:00
      - CRON_TIME=* 3 * * *
    restart: unless-stopped

Restore from a backup

See the list of backups in your running docker container, just write in your favorite terminal:

docker container exec backup ls /backup

To restore a database from a certain backup, simply run:

docker container exec backup /restore.sh /backup/201708060500.my_db.sql.gz