Compare commits
	
		
			2 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d150b7c25e | |||
| 5b172385ca | 
					 2 changed files with 18 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,10 +45,10 @@ if [ `docker exec -i $CONTAINER test -e /usr/bin/mariadb-dump && echo "yes" || e
 | 
			
		|||
        --events \
 | 
			
		||||
        --routines \
 | 
			
		||||
        --single-transaction \
 | 
			
		||||
        --triggers | restic backup --stdin --stdin-filename=$DBTYPE_$CONTAINER_$DB_NAME.sql
 | 
			
		||||
        --triggers | restic backup --stdin --stdin-filename=$DBTYPE_$CONTAINER.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
 | 
			
		||||
    docker exec -i $CONTAINER pg_dumpall --username=$DB_USER --password=$PGPASSWORD | restic backup --stdin --stdin-filename=$DBTYPE_$CONTAINER.sql
 | 
			
		||||
else
 | 
			
		||||
    echo "Unsupported database type or database client not found in the container."
 | 
			
		||||
    exit 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue