#!/bin/bash # Environment variables # # CONTAINER - name of the container where the database is running # NOTIFY_URL - optional, URL to send notification to # TARGET_DIR - directory where to store the backup if [ -z "$CONTAINER" ]; then echo "CONTAINER environment variable is not set." exit 1 fi if [ -z "$TARGET_DIR" ]; then echo "TARGET_DIR 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 if [ ! -d "$TARGET_DIR" ]; then echo "TARGET_DIR does not exist. Creating it..." exit 2 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" FILENAME=`date +"%Y%m%d_%H%M%S"`_$DBTYPE_$CONTAINER_$DB_NAME.sql.zst.tmp 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 | zstd -1 > $TARGET_DIR/ mv $TARGET_DIR/$DBTYPE_$CONTAINER_$DB_NAME.sql.zst.tmp $TARGET_DIR/$DBTYPE_$CONTAINER_$DB_NAME.sql.zst elif [ `docker exec -i $CONTAINER test -e /usr/bin/pg_dump && echo "yes" || echo "no"` = "yes" ]; then DBTYPE="pgsql" FILENAME=`date +"%Y%m%d_%H%M%S"`_$DBTYPE_$CONTAINER_$DB_NAME.sql.zst docker exec -i $CONTAINER pg_dump --username=$DB_USER --password=$PGPASSWORD $DB_NAME | zstd -1 > $TARGET_DIR/$FILENAME.tmp mv $TARGET_DIR/$FILENAME.tmp $TARGET_DIR/$FILENAME else echo "Unsupported database type or database client not found in the container." exit 1 fi echo "Backup completed successfully." if [ -n "$NOTIFY_URL" ]; then curl $NOTIFY_URL fi