#!/bin/bash # Environment variables # # CONTAINER - name of the container where the database is running # RESTIC_PASSWORD # RESTIC_REPOSITORY # NOTIFY_URL - optional, URL to send notification to if [ -z "$CONTAINER" ]; then echo "CONTAINER environment variable is not set." exit 1 fi if [ -z "$RESTIC_PASSWORD" ]; then echo "RESTIC_PASSWORD environment variable is not set." exit 1 fi if [ -z "$RESTIC_REPOSITORY" ]; then echo "RESTIC_REPOSITORY environment variable is not set." exit 1 fi docker info > /dev/null 2>&1 if [ ! $? -eq 0 ]; then echo "Docker is not available." exit 1 fi echo "Starting backup for container: $CONTAINER" if [ `docker exec -i $CONTAINER test -e /usr/bin/mariadb-dump && echo "yes" || echo "no"` = "yes" ]; then DBTYPE="mariadb" docker exec -i $CONTAINER mariadb-dump \ --user=root \ --password=$MARIADB_ROOT_PASSWORD \ --add-drop-trigger \ --add-drop-table \ --add-drop-database \ --hex-blob \ --compress \ --events \ --routines \ --single-transaction \ --triggers | restic backup --stdin --stdin-filename=$DBTYPE_$CONTAINER_$DB_NAME.sql elif [ `docker exec -i $CONTAINER test -e /usr/bin/pg_dump && echo "yes" || echo "no"` = "yes" ]; then DBTYPE="pgsql" docker exec -i $CONTAINER pg_dump --username=$DB_USER --password=$PGPASSWORD $DB_NAME | restic backup --stdin --stdin-filename=$DBTYPE_$CONTAINER_$DB_NAME.sql else echo "Unsupported database type or database client not found in the container." exit 1 fi echo "Backup completed successfully." echo "Running restic forget and prune..." restic forget --prune --keep-daily 7 --keep-weekly 4 if [ -n "$NOTIFY_URL" ]; then curl $NOTIFY_URL fi