From 5b172385ca8d6f8697d28c1ab450b38734790395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0trauch?= Date: Sat, 18 Oct 2025 23:57:40 +0200 Subject: [PATCH] Enhance backup script: add default history variable and improve filename formatting --- backup_local.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/backup_local.sh b/backup_local.sh index 168ab86..89bc5ff 100644 --- a/backup_local.sh +++ b/backup_local.sh @@ -7,6 +7,7 @@ set -e # 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 +# HISTORY - number of backups to keep (default: 3) if [ -z "$CONTAINER" ]; then echo "CONTAINER environment variable is not set." @@ -18,6 +19,10 @@ if [ -z "$TARGET_DIR" ]; then exit 1 fi +if [ -z "$HISTORY" ]; then + HISTORY=3 +fi + docker info > /dev/null 2>&1 if [ ! $? -eq 0 ]; then echo "Docker is not available." @@ -33,7 +38,7 @@ 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 + FILENAME=`date +"%Y%m%d_%H%M%S"`_$DBTYPE_$CONTAINER.sql.zst docker exec -i $CONTAINER mariadb-dump \ --all-databases \ --user=root \ @@ -50,8 +55,8 @@ if [ `docker exec -i $CONTAINER test -e /usr/bin/mariadb-dump && echo "yes" || e mv $TARGET_DIR/$FILENAME.tmp $TARGET_DIR/$FILENAME 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 + FILENAME=`date +"%Y%m%d_%H%M%S"`_$DBTYPE_$CONTAINER.sql.zst + docker exec -i $CONTAINER pg_dumpall --username=$DB_USER --password=$PGPASSWORD | 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." @@ -60,6 +65,14 @@ fi echo "Backup completed successfully." +# Remove old backups +echo "Removing old backups, keeping last $HISTORY backups..." +cd $TARGET_DIR +ls -1t *_$DBTYPE_$CONTAINER.sql.zst | tail -n +$((HISTORY + 1)) | xargs -r rm -- +cd - +echo "Old backups removed." + + if [ -n "$NOTIFY_URL" ]; then curl $NOTIFY_URL fi