bash Database

MongoDB Backup Script

Automated MongoDB backup with compression, rotation, optional S3 upload, and email notifications on failure.

Apex Logic 0 copies
bash
#!/bin/bash
# MongoDB Backup Script with rotation and S3 upload
set -euo pipefail

DB_NAME="${MONGO_DB:-myapp}"
MONGO_URI="${MONGO_URI:-mongodb://localhost:27017}"
BACKUP_DIR="/backups/mongodb"
RETENTION_DAYS=14
S3_BUCKET="${S3_BUCKET:-}"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DB_NAME}_${DATE}"

mkdir -p "$BACKUP_DIR"

echo "[$(date)] Starting backup of $DB_NAME..."

# Create backup
mongodump --uri="$MONGO_URI" --db="$DB_NAME" --out="$BACKUP_PATH" --gzip

# Compress into single archive
ARCHIVE="${BACKUP_PATH}.tar.gz"
tar -czf "$ARCHIVE" -C "$BACKUP_DIR" "${DB_NAME}_${DATE}"
rm -rf "$BACKUP_PATH"

SIZE=$(du -h "$ARCHIVE" | cut -f1)
echo "[$(date)] Backup created: $ARCHIVE ($SIZE)"

# Upload to S3 if configured
if [ -n "$S3_BUCKET" ]; then
    echo "Uploading to S3..."
    aws s3 cp "$ARCHIVE" "s3://${S3_BUCKET}/mongodb/$(basename $ARCHIVE)" \
        --storage-class STANDARD_IA
    echo "Uploaded to s3://${S3_BUCKET}/mongodb/"
fi

# Rotate old backups
echo "Removing backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete

REMAINING=$(ls -1 "$BACKUP_DIR"/*.tar.gz 2>/dev/null | wc -l)
echo "[$(date)] Backup complete. $REMAINING backups retained."
echo "---"
echo "Database: $DB_NAME"
echo "Archive: $ARCHIVE"
echo "Size: $SIZE"

Tags

mongodb backup database automation

Related Snippets

javascript

MongoDB Connection with Retry

bash

Docker Cleanup Script

bash

SSL Certificate Auto-Renewal

bash

PM2 Deployment Script