Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Ubuntu Sunucuda Tam Otomatik Yedekleme ve Kurtarma Sistemi Kurulum Rehberi 💾

devron

Üye
Katılım
14 Mart 2026
Mesajlar
9
Ubuntu Sunucuda Tam Otomatik Yedekleme ve Kurtarma Sistemi Kurulum Rehberi 💾

Selam sistemciler! 🖥️ Bugün, her sistem yöneticisinin en büyük kabusu olan "veri kaybı"na karşı, uyurken bile çalışan bir koruma kalkanı kuracağız. Sunucularımız ne kadar stabil olursa olsun, insan hatası, donanım arızası veya kötü niyetli bir yazılım her şeyi bir anda silip atabilir. Hazır mısınız? Terminalin tozunu alıp, "bir gün lazım olur" dediğimiz o yedekleme sistemini bugün kuruyoruz!

Neden Sadece Manuel Yedek Yeterli Değil?

Hepimiz "yarın yaparım" deriz, ama o yarın hiç gelmeyebilir. Otomatik bir sistem:
  • Unutkanlığa karşı sigortanızdır.
  • Felaket anında hızlı kurtarma (RTO) sağlar.
  • Düzenli ve tutarlı yedek alır.
  • Geçmişe dönük versiyonlama imkanı verir.

Hangi Araçları Kullanacağız?

Karmaşık ve pahalı yazılımlara gerek yok. Linux'un gücü adına! 🐧
  • rsync: Dosya kopyalama ve senkronizasyonun efendisi. Hızlı ve güvenilir.
  • tar: Dosyaları sıkıştırıp tek bir arşiv haline getirir.
  • cron: Zamanlanmış görevlerin beyni. Otomasyonun temeli.
  • Bash Scripting: Tüm bu araçları bir araya getiren yapıştırıcımız.

Adım 1: Yedekleme Senaryosunu ve Hedefi Belirleyelim

Örneğimizde şunu yapacağız:
  • Her gece saat 02:00'de çalışacak.
  • /var/www/html (web siteleri), /etc (konfigürasyonlar) ve /home (kullanıcı dizinleri) klasörlerini yedekleyecek.
  • Yedekleri sunucunun /backup dizinine (farklı bir disk bölümü önerilir) alacak.
  • Yedekleri tarih bazlı isimlendirip, 7 günden eski olanları silecek.

Önce yedek dizinimizi oluşturalım:
Bash:
sudo mkdir -p /backup
sudo chown $USER:$USER /backup # Mevcut kullanıcıya yetki ver (opsiyonel, güvenlik için ayarlayabilirsiniz)

Adım 2: Sihirli Bash Script'imizi Yazalım

`/usr/local/bin/backup-script.sh` dosyasını oluşturalım:
Bash:
#!/bin/bash

# Betik başlığı ve log kaydı
echo "========================================"
echo "Otomatik Yedekleme Başlatıldı: $(date)"
echo "========================================"

# 1. DEĞİŞKENLERİ TANIMLA
BACKUP_DIR="/backup"
SOURCE_DIRS=("/var/www/html" "/etc" "/home") # Yedeklenecek dizinler
HOSTNAME=$(hostname -s)
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_NAME="${HOSTNAME}_backup_${TIMESTAMP}"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
LOG_FILE="${BACKUP_DIR}/backup.log"

# 2. YEDEK DİZİNİ KONTROL ET
if [ ! -d "$BACKUP_DIR" ]; then
  echo "[HATA] $BACKUP_DIR dizini bulunamadı!" | tee -a "$LOG_FILE"
  exit 1
fi

# 3. TEMP DİZİNİNDE ÇALIŞ
TEMP_DIR=$(mktemp -d)
echo "Geçici çalışma dizini: $TEMP_DIR"

# 4. RSYNC İLE DOSYALARI TEMP DİZİNİNE KOPYALA
for dir in "${SOURCE_DIRS[@]}"; do
  if [ -d "$dir" ]; then
    echo "Yedekleniyor: $dir"
    rsync -a --relative "$dir" "$TEMP_DIR/" 2>/dev/null
    if [ $? -ne 0 ]; then
      echo "[UYARI] $dir yedeklenirken hata oluştu (yetki problemi olabilir)." | tee -a "$LOG_FILE"
    fi
  else
    echo "[UYARI] $dir dizini bulunamadı, atlanıyor." | tee -a "$LOG_FILE"
  fi
done

# 5. TAR.GZ OLUŞTUR (Sıkıştırılmış Arşiv)
echo "Arşiv oluşturuluyor: $BACKUP_PATH"
tar -czf "$BACKUP_PATH" -C "$TEMP_DIR" . 2>/dev/null

if [ $? -eq 0 ]; then
  echo "[BAŞARILI] Yedek oluşturuldu: $(du -sh $BACKUP_PATH | cut -f1)" | tee -a "$LOG_FILE"
else
  echo "[HATA] Arşiv oluşturulamadı!" | tee -a "$LOG_FILE"
  exit 1
fi

# 6. TEMP DİZİNİNİ TEMİZLE
rm -rf "$TEMP_DIR"
echo "Geçici dizin temizlendi."

# 7. ESKİ YEDEKLERİ SİL (7 günden eski olanları)
echo "Eski yedekler temizleniyor (7 günden eski)..."
find "$BACKUP_DIR" -name "${HOSTNAME}_backup_*.tar.gz" -type f -mtime +7 -delete -print | tee -a "$LOG_FILE"

# 8. BİTİŞ
echo "========================================"
echo "Otomatik Yedekleme Tamamlandı: $(date)"
echo "========================================" | tee -a "$LOG_FILE"

Script'e çalıştırma izni verelim:
Bash:
sudo chmod +x /usr/local/bin/backup-script.sh

Adım 3: Cron ile Otomasyonu Sağlayalım

Şimdi bu script'in her gece otomatik çalışmasını sağlayalım. Cron tablosunu düzenleyelim:
Bash:
crontab -e

Açılan dosyanın en altına şu satırı ekleyin (her gece 02:00'de çalıştırmak için):
Bash:
# Her gece saat 02:00'de yedekleme script'ini çalıştır, çıktıyı log dosyasına yaz.
0 2 * * * /usr/local/bin/backup-script.sh >> /backup/cron.log 2>&1

Adım 4: Test ve Kontrol 🧪

Her şeyi kurduk, şimdi test zamanı! Script'i manuel çalıştıralım:
Bash:
/usr/local/bin/backup-script.sh

Ardından yedeklerin oluştuğunu kontrol edelim:
Bash:
ls -lh /backup/
tail -f /backup/backup.log # Canlı log'u izle (Ctrl+C ile çıkın)

Bir Adım Ötesi: Yedekleri Uzak Sunucuya Göndermek

Yedekler aynı sunucuda durursa, sunucu çökerse hepsi gider. İşte basit bir çözüm: Script'in sonuna, yedek oluşturulduktan sonra uzak sunucuya `scp` veya `rsync` ile gönderme komutları ekleyebilirsiniz. Örnek bir rsync satırı:
Bash:
# BACKUP_PATH oluşturulduktan SONRA bu satırı ekleyin (ssh key ayarlı olmalı).
rsync -avz -e ssh "$BACKUP_PATH" kullanici@uzak-sunucu-ip:/uzak/backup/dizini/

Kurtarma (Restore) Zamanı Geldiğinde...

Panik yok! Yedeğiniz hazır. Örneğin `/var/www/html` dizinini geri yüklemek için:
Bash:
# 1. Yedeği uygun bir yere aç
tar -xzf /backup/sunucuadi_backup_20231027_020000.tar.gz -C /tmp/backup-extract

# 2. Gerekli dizinleri kopyala (dikkatli olun, mevcut dosyaların üzerine yazar!)
sudo cp -r /tmp/backup-extract/var/www/html /var/www/
# veya daha güvenlisi rsync:
# sudo rsync -av /tmp/backup-extract/var/www/html/ /var/www/html/

⚙️ İşte bu kadar! Artık sunucunuz, siz uyurken bile kendini düzenli olarak yedekliyor. Bu sistem temel bir altyapı. İhtiyaçlarınıza göre veritabanı dump'ı ekleyebilir (mysqldump/pg_dump), bildirim gönderebilir (mail, Telegram botu) veya şifreleme ekleyebilirsiniz.

Peki sizin yedekleme stratejiniz nedir? Hiç "keşke yedek alsaydım" dediğiniz bir an oldu mu? Yorumlarda deneyimlerinizi paylaşın! 👇
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri