# Linux'ta rsync ile yedek alma: sunucudan sunucuya ve zamanlanmış

https://kervanhosting.com/bilgi-bankasi/makale/linux-sunucuda-rsync-ile-yedek-alma

`rsync`, iki yer arasında dosyaları eşitleyen, yalnızca değişenleri aktaran bir araçtır. Bu yüzden ilk yedek uzun sürse de sonrakiler saniyeler alır. Yedek stratejinizin temel taşı olabilir: sunucudaki önemli klasörleri her gece başka bir yere kopyalar.

## Temel kullanım

```
rsync -avz /var/www/ kullanici@yedek.ornek.com:/yedekler/www/
```

Bayraklar: `-a` izinleri, sahipleri ve zamanları korur, `-v` yaptığını yazar, `-z` aktarım sırasında sıkıştırır. Kaynak yoldaki **sondaki eğik çizgi önemlidir**: `/var/www/` klasörün içindekileri, `/var/www` ise klasörün kendisini de kopyalar. Karışırsa hedefte bir iç içe klasör oluşur.

## Önce deneme çalıştırması

Ne yapacağını görmek için `-n` (dry run) ekleyin; hiçbir dosyaya dokunmaz:

```
rsync -avzn /var/www/ kullanici@yedek.ornek.com:/yedekler/www/
```

## Silinen dosyaları da eşitlemek: --delete

Kaynakta sildiğiniz dosyanın hedefte de silinmesini isterseniz `--delete` ekleyin. **Dikkat:** bu bayrak hedefte kaynakta olmayan her şeyi siler. Yanlış yola yazarsanız hedefteki verilerinizi kaybedersiniz. Önce `-n` ile deneyin. Ayrıca bu bir "ayna"dır, yedek değildir: kaynakta yanlışlıkla silinen dosya bir sonraki eşitlemede yedekten de silinir. Geçmiş sürümler için tarih klasörlü yedek kullanın (aşağıda).

## Parolasız çalıştırma (SSH anahtarı)

Otomatik çalışması için hedef sunucuya anahtarla bağlanmanız gerekir:

```
ssh-keygen -t ed25519 -f ~/.ssh/yedek_anahtar -N ""
ssh-copy-id -i ~/.ssh/yedek_anahtar.pub kullanici@yedek.ornek.com
rsync -avz -e "ssh -i ~/.ssh/yedek_anahtar" /var/www/ kullanici@yedek.ornek.com:/yedekler/www/
```

Anahtar parolasız olduğundan dosyayı yalnızca kendi kullanıcınız okuyabilmeli ve hedef sunucudaki kullanıcı yalnızca yedek klasörüne yazabilmelidir. Anahtar ayrıntıları: [SSH anahtarı](https://kervanhosting.com/bilgi-bankasi/makale/ssh-anahtari-nedir-parola-yerine-nasil-kullanirim).

## Geçmiş sürümleri saklamak

Her gün ayrı klasör oluşturup, değişmeyen dosyaları önceki günle bağlantılı (hardlink) tutmak, az yer harcayarak geçmiş sürümler verir:

```
BUGUN=$(date +%F)
rsync -az --link-dest=../son -e "ssh -i ~/.ssh/yedek_anahtar" /var/www/ kullanici@yedek.ornek.com:/yedekler/$BUGUN/
ssh -i ~/.ssh/yedek_anahtar kullanici@yedek.ornek.com "ln -sfn /yedekler/$BUGUN /yedekler/son"
```

Eski günleri periyodik silmeyi unutmayın, aksi halde yedek diski dolar.

## Veritabanını ayrıca dökün

Çalışan bir veritabanının dosyalarını rsync ile kopyalamayın; tutarsız çıkar. Önce döküm alın, sonra rsync ile gönderin:

```
mysqldump --single-transaction --all-databases | gzip > /yedekler/db-$(date +%F).sql.gz
```

## Zamanlamak

Yukarıdaki komutları bir betiğe koyup her gece çalıştırın: [cron görevi ekleme](https://kervanhosting.com/bilgi-bankasi/makale/zamanlanmis-gorev-cron-nasil-eklenir). Örneğin her gece 03:30: `30 3 * * * /usr/local/bin/yedek.sh >> /var/log/yedek.log 2>&1`. Günlüğe bakıp çalışıp çalışmadığını zaman zaman kontrol edin.

## Geri yükleme

Yönü tersine çevirmeniz yeterlidir: `rsync -avz kullanici@yedek.ornek.com:/yedekler/www/ /var/www/`. Geri yüklemeyi bir kez deneyin; çalışmayan yedek yedek değildir. Daha geniş strateji için [3-2-1 kuralına](https://kervanhosting.com/bilgi-bankasi/makale/yedekleme-icin-3-2-1-kurali-nedir), panel seçenekleri için [yedek makalesine](https://kervanhosting.com/bilgi-bankasi/makale/yedek-nasil-alinir-zamanlanir-ve-geri-yuklenir) bakın.

## Sık sorulanlar

### Windows'tan Linux'a rsync yapabilir miyim?

WSL ya da Git Bash içinde rsync çalışır. Windows sunucuda dosya yedeği için ise `robocopy` kullanabilirsiniz.

### rsync çok yavaş.

İlk çalıştırma tüm dosyaları kopyalar. Küçük çok sayıda dosya yavaştır; ağ hızınıza da bağlıdır. `--progress` ile ilerlemeyi izleyin, sonraki çalışmalar çok daha hızlı olur.

### Hedef sunucu kim olabilir?

Başka bir sunucunuz, evdeki bir bilgisayar ya da bir depolama hizmeti. Önemli olan yedeğin kaynakla aynı sunucuda ya da aynı diskte durmamasıdır.

**İlgili makaleler**

- [Yedek nasıl alınır, zamanlanır ve geri yüklenir?](https://kervanhosting.com/bilgi-bankasi/makale/yedek-nasil-alinir-zamanlanir-ve-geri-yuklenir)
- [Yedekleme için 3-2-1 kuralı nedir?](https://kervanhosting.com/bilgi-bankasi/makale/yedekleme-icin-3-2-1-kurali-nedir)
- [Zamanlanmış görev (cron) nasıl eklenir?](https://kervanhosting.com/bilgi-bankasi/makale/zamanlanmis-gorev-cron-nasil-eklenir)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
