Bu script, MongoDB veritabanının yedeğini alır ve /opt/mongoyedek klasöründe saklar. Birden fazla yedek varsa, en yeni 2 tanesini tutar ve diğerlerini siler. 

Script için belirtilen {Ip},{Username},{Password} alanlarını kendi Db bilgilerinize göre düzenleyiniz.

sudo vi mongodump.sh
POWERSHELL
#!/bin/bash

IP_ADDRESS="{Ip}"
USERNAME="{Username}"
PASSWORD="{Password}"
PORT="25080"
BACKUP_DIR="/opt/mongoyedek"

# Yedekleme Klasörünü Kontrol Et ve Oluştur
if [ ! -d "$BACKUP_DIR" ]; then
    sudo mkdir -p "$BACKUP_DIR"
    sudo chown $USER:$USER "$BACKUP_DIR"
fi

# Dosya ismini belirle ve numara ekle
DATE=$(date +%F)  
BASE_NAME="apinizer-backup-${DATE}"
index=0

# Aynı gün içinde mevcut dosyaları kontrol et ve uygun bir numara belirle
while [ -e "${BACKUP_DIR}/${BASE_NAME}-${index}.archive" ]; do
    index=$((index + 1))
done

BACKUP_PATH="${BACKUP_DIR}/${BASE_NAME}-${index}.archive"

# Son 2 dosyayı tutmak için dosya isimlerini al ve sil
files_to_keep=$(ls -lt "$BACKUP_DIR"/*.archive | head -n 2 | awk '{print $9}')
all_files=$(ls -lt "$BACKUP_DIR"/*.archive | awk '{print $9}')
files_to_delete=$(comm -23 <(echo "$all_files" | sort) <(echo "$files_to_keep" | sort))

for file in $files_to_delete; do
    echo "Siliniyor: $file"
    sudo rm -f "$file"
done


sudo mongodump --host "$IP_ADDRESS" --port="$PORT" --username="$USERNAME" --password="$PASSWORD" --authenticationDatabase=admin --gzip --archive="$BACKUP_PATH"

echo "Yedekleme tamamlandı: $BACKUP_PATH"

POWERSHELL
sudo chmod +x mongodump.sh
./mongodump.sh
POWERSHELL

Dilerseniz  scriptin belirli bir zamanda ya da zaman periyodunda çalıştırılmasını sağlayabilirsiniz. Bunun için cron kullanılabilir.

sudo crontab -e
POWERSHELL

Açılan dosyanın içine alttaki satırı ekleyiniz.

59 23 1 * * /path/mongodump.sh
POWERSHELL

Örnek kulllanımda her ayın 1. günü saat 23:59 da script çalışacaktır.