#!/bin/bash # Immich Database Backup Script BACKUP_DIR=~/immich/backups TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/immich-db-$TIMESTAMP.sql.gz" # Create backup directory if it doesn't exist mkdir -p "$BACKUP_DIR" echo "Starting database backup: $(date)" # Create backup cd ~/immich docker-compose exec -T postgres pg_dumpall -U postgres | gzip > "$BACKUP_FILE" if [ $? -eq 0 ]; then echo "✓ Backup successful: $BACKUP_FILE" # Get backup size SIZE=$(du -h "$BACKUP_FILE" | cut -f1) echo " Size: $SIZE" # Keep only last 30 days of backups find "$BACKUP_DIR" -name "immich-db-*.sql.gz" -mtime +30 -delete # Count remaining backups COUNT=$(ls -1 "$BACKUP_DIR"/immich-db-*.sql.gz 2>/dev/null | wc -l) echo " Total backups: $COUNT" else echo "✗ Backup failed!" exit 1 fi echo "Backup completed: $(date)"