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. 

Bu script'i kullanacaksanız önce test ortamınızda ayarlayın ve çalışmasını uygun gördüğünüz bir süre boyunca takip edin.

Eski yedeklerin çok fazla sayıda olması ya da silinmemesi durumunda sunucunun diskini doldurmamak için ya yedekleri alacağınız adrese ayrı bir disk alanı tanımlatın ya da yedekleri sunucu haricinde bir yere taşımayı da gözden geçirin.

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.