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:
Hangi Araçları Kullanacağız?
Karmaşık ve pahalı yazılımlara gerek yok. Linux'un gücü adına!
Adım 1: Yedekleme Senaryosunu ve Hedefi Belirleyelim
Örneğimizde şunu yapacağız:
Önce yedek dizinimizi oluşturalım:
Adım 2: Sihirli Bash Script'imizi Yazalım
`/usr/local/bin/backup-script.sh` dosyasını oluşturalım:
Script'e çalıştırma izni verelim:
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:
Açılan dosyanın en altına şu satırı ekleyin (her gece 02:00'de çalıştırmak için):
Adım 4: Test ve Kontrol
Her şeyi kurduk, şimdi test zamanı! Script'i manuel çalıştıralım:
Ardından yedeklerin oluştuğunu kontrol edelim:
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ı:
Kurtarma (Restore) Zamanı Geldiğinde...
Panik yok! Yedeğiniz hazır. Örneğin `/var/www/html` dizinini geri yüklemek için:
İş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!
Selam sistemciler!
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/
Peki sizin yedekleme stratejiniz nedir? Hiç "keşke yedek alsaydım" dediğiniz bir an oldu mu? Yorumlarda deneyimlerinizi paylaşın!