61 lines
1.8 KiB
Bash
61 lines
1.8 KiB
Bash
#!/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
|
|
|
|
if [ ! `docker info` ]; 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
|