sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa İşletim Sistemleri rsync ile Sunucular Arası Dosya Yedekleme ve Se...
🐧 İşletim Sistemleri

rsync ile Sunucular Arası Dosya Yedekleme ve Senkronizasyon

rsync ile sunucular arası dosya yedekleme: SSH şifreli aktarım, --delete parametresi, exclude listesi ve cron otomasyonu.

📅 18 Mayıs 2025 👁 10 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

rsync Nedir?

rsync (remote sync), dosyaları ve dizinleri yerel veya uzak sistemler arasında verimli biçimde senkronize eden bir araçtır. Temel avantajı delta aktarım algoritmasıdır: yalnızca kaynak ve hedef arasındaki farkları aktarır, bu sayede bant genişliği kullanımını minimize eder. Tam yedek, artımlı yedek ve yansı (mirror) yedekleme senaryolarında kullanılır.

rsync, SSH üzerinden şifreli aktarım, sıkıştırma, izin ve sembolik link korunması, kısmi aktarım kurtarma ve ayrıntılı ilerleme raporu gibi özellikleri bünyesinde barındırır. Sunucu altyapısı yedekleme, web sitesi migration ve backup otomasyonu için endüstri standardı haline gelmiştir.

Temel rsync Sözdizimi

rsync [SEÇENEKLER] KAYNAK HEDEF

# Temel bayraklar:
# -a  : archive modu (izinler, sahip, tarih, sembolik link korunur)
# -v  : verbose (ayrıntılı çıktı)
# -z  : aktarımı sıkıştır
# -P  : ilerlemeyi göster + yarım kalan aktarımı devam ettir
# -h  : boyutları okunabilir formatta göster
# -n  : dry run (gerçekte kopyalamaz, sadece gösterir)

Yerel Dizin Senkronizasyonu

# Dizin senkronizasyonu (sondaki / önemli!)
rsync -avzP /var/www/ /backup/www/

# Kaynak: /var/www/ (içerik), Hedef: /backup/www/
# DOĞRU: /var/www/ → /backup/www/dosyalar
# YANLIŞ: /var/www → /backup/www/www/dosyalar (iç içe geçer)

SSH Üzerinden Uzak Sunucuya Yedekleme

# Yerel → Uzak
rsync -avzP -e "ssh -p 22" /var/www/ kullanici@backup-server.com:/backup/www/

# Uzak → Yerel
rsync -avzP -e "ssh -p 2222" kullanici@prod-server.com:/var/www/ /local/backup/

# SSH anahtar ile kimlik doğrulama (parola gerektirmez)
rsync -avzP -e "ssh -i /root/.ssh/backup_key" /var/www/ backup@10.0.0.2:/backup/

--delete ile Ayna (Mirror) Yedekleme

# Kaynaktan silinen dosyalar hedefte de silinir (tam yansı)
rsync -avzP --delete /var/www/ /backup/www/

# UYARI: --delete hedefte kaynak dışı dosyaları siler!
# Önce dry run ile test edin:
rsync -avzPn --delete /var/www/ /backup/www/

--dry-run ile Güvenli Test

# Gerçekte hiçbir şey değiştirmeden ne olacağını göster
rsync -avzPn --delete /var/www/ user@backup:/backup/www/

# -n veya --dry-run ile --itemize-changes kombinasyonu
rsync -avzn --itemize-changes /src/ /dst/

Exclude Listesi ile Belirli Dosyaları Hariç Tutma

# Belirli dosya/dizinleri hariç tut
rsync -avzP \
  --exclude='*.log' \
  --exclude='*.tmp' \
  --exclude='cache/' \
  --exclude='node_modules/' \
  --exclude='.git/' \
  /var/www/ /backup/www/

# exclude-from dosyası kullanarak
echo '*.log
*.tmp
cache/
node_modules/
.git/' > /tmp/rsync-exclude.txt

rsync -avzP --exclude-from=/tmp/rsync-exclude.txt /var/www/ /backup/www/

MySQL Veritabanını Dahil Ederek Tam Yedek

#!/bin/bash
# Önce MySQL yedek al
BACKUP_DIR="/backup/$(date +%Y-%m-%d)"
mkdir -p "$BACKUP_DIR"

mysqldump -u root -p"MYSQL_SIFRESI" --all-databases | \
  gzip > "$BACKUP_DIR/all_databases.sql.gz"

# Sonra web dosyalarını senkronize et
rsync -avzP --delete \
  --exclude='*.log' \
  /var/www/ "$BACKUP_DIR/www/"

echo "Yedekleme tamamlandı: $BACKUP_DIR"

Cron ile Otomatik Yedekleme

sudo crontab -e
# Her gece 02:00'de otomatik yedekleme
0 2 * * * rsync -avzq --delete -e "ssh -i /root/.ssh/backup_key" \
  /var/www/ backup@10.0.0.2:/backup/www/ >> /var/log/rsync-backup.log 2>&1

# Her hafta pazar günü tam yedek
0 1 * * 0 rsync -avzq --delete /var/www/ /backup/weekly/

SSH Anahtarsız Erişim Kurulumu

# Backup için özel SSH anahtarı oluştur
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""

# Public key'i backup sunucusuna kopyala
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup-server.com

# Test et
ssh -i /root/.ssh/backup_key backup@backup-server.com "echo Baglanti basarili"

Incremental Backup (--link-dest)

# Önceki yedekle aynı dosyalar hard link olarak saklanır (disk tasarrufu)
TARIH=$(date +%Y-%m-%d)
ONCEKI="/backup/latest"

rsync -avzP --link-dest="$ONCEKI" \
  /var/www/ "/backup/$TARIH/"

# En son yedeği güncelle
rm -f "$ONCEKI"
ln -s "/backup/$TARIH" "$ONCEKI"

Sık Karşılaşılan Sorunlar

Permission Denied

# rsync'i sudo ile çalıştır veya izinleri kontrol et:
sudo rsync -avzP /var/www/ /backup/
# Uzak sunucuda: --rsync-path="sudo rsync" kullanın

Yavaş Aktarım

# Sıkıştırma algoritmasını değiştir
rsync -avz --compress-level=1 /kaynak/ /hedef/

# AES-128-CTR daha hızlı şifreleme:
rsync -avz -e "ssh -c aes128-ctr" /kaynak/ user@uzak:/hedef/

Sonuç

rsync ile sunucular arası otomatik yedekleme ve senkronizasyon altyapısı kurdunuz. --delete ile ayna yedekleme, --link-dest ile artımlı yedekleme, cron ile otomasyon ve SSH anahtarı ile güvenli erişim kombinasyonu, kurumsal düzeyde bir yedekleme sistemi oluşturmanızı sağlar.

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.