Bu rehberde neler var?
- 3-2-1 yedekleme kuralının kopya, ortam ve lokasyon olarak açılımı.
- tar tabanlı yedek script'i ve eski yedekleri silen saklama süresi mantığı.
- mysqldump ve pg_dumpall ile veritabanı yedeği alma komutları.
- Cron sözdizimi ile günlük, saatlik ve haftalık yedek zamanlaması.
Linux Sunucuda Otomatik Yedekleme Rehberi
Veri kaybı, sunucu yönetimindeki en büyük risklerden biridir. Donanım arızası, yazılım hatası veya insan kaynaklı hatalar verilerinizi tehdit edebilir. Otomatik yedekleme sistemi kurmak, bu risklere karşı en etkili savunmanızdır. Bu rehberde Linux VDS üzerinde profesyonel yedekleme stratejileri oluşturmayı anlatıyoruz.
Yedekleme Stratejileri
3-2-1 Kuralı
Profesyonel yedekleme için 3-2-1 kuralını uygulayın:
- 3 kopya: Orijinal + 2 yedek
- 2 farklı ortam: Yerel disk + uzak sunucu
- 1 kopya offsite: Farklı lokasyonda
💡 Sağlayıcınız yedek alıyor olsa bile kendi yedekleme stratejinizi oluşturmanızı öneriyoruz; yedeğin bir kopyası her zaman sizin kontrolünüzde olmalı.
Yöntem 1: Basit Bash Script ile Yedekleme
Temel Yedekleme Script’i
#!/bin/bash
# backup.sh - Temel yedekleme scripti
# Ayarlar
BACKUP_DIR="/backup"
SOURCE_DIRS="/var/www /etc /home"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
LOG_FILE="$BACKUP_DIR/backup.log"
RETENTION_DAYS=7
# Yedek klasörü oluştur
mkdir -p $BACKUP_DIR
# Yedekleme başlat
echo "[$DATE] Yedekleme başladı..." >> $LOG_FILE
tar -czf $BACKUP_FILE $SOURCE_DIRS 2>> $LOG_FILE
if [ $? -eq 0 ]; then
FILESIZE=$(du -h $BACKUP_FILE | cut -f1)
echo "[$DATE] Yedekleme başarılı: $BACKUP_FILE ($FILESIZE)" >> $LOG_FILE
else
echo "[$DATE] HATA: Yedekleme başarısız!" >> $LOG_FILE
fi
# Eski yedekleri temizle
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "[$DATE] $RETENTION_DAYS günden eski yedekler temizlendi." >> $LOG_FILE
# Script'i çalıştırılabilir yap
chmod +x /root/backup.sh
# Test et
./backup.sh
Yöntem 2: Veritabanı Yedekleme
MySQL/MariaDB Yedekleme
#!/bin/bash
# db_backup.sh - Veritabanı yedekleme
BACKUP_DIR="/backup/db"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="root"
DB_PASS="veritabani_sifresi"
mkdir -p $BACKUP_DIR
# Tüm veritabanlarını yedekle
mysqldump -u$DB_USER -p$DB_PASS --all-databases --single-transaction | gzip > "$BACKUP_DIR/all_db_$DATE.sql.gz"
# Belirli bir veritabanını yedekle
mysqldump -u$DB_USER -p$DB_PASS fivem_db --single-transaction | gzip > "$BACKUP_DIR/fivem_db_$DATE.sql.gz"
# 14 günden eski yedekleri sil
find $BACKUP_DIR -name "*.sql.gz" -mtime +14 -delete
PostgreSQL Yedekleme
#!/bin/bash
# pg_backup.sh
BACKUP_DIR="/backup/pgsql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Tüm veritabanlarını yedekle
sudo -u postgres pg_dumpall | gzip > "$BACKUP_DIR/pg_all_$DATE.sql.gz"
Yöntem 3: rsync ile Artımlı Yedekleme
rsync, sadece değişen dosyaları kopyalar. Bu sayede hızlı ve verimli yedekleme yapar:
#!/bin/bash
# rsync_backup.sh - Artımlı yedekleme
SOURCE="/var/www"
DEST="/backup/rsync"
LOG="/var/log/rsync_backup.log"
mkdir -p $DEST
rsync -avz --delete \
--exclude='*.log' \
--exclude='node_modules/' \
--exclude='.git/' \
$SOURCE $DEST \
>> $LOG 2>&1
echo "[$(date)] rsync yedekleme tamamlandı." >> $LOG
Uzak Sunucuya rsync
# Başka bir sunucuya yedek gönderme
rsync -avz -e "ssh -p 22" /backup/ backup_user@UZAK_SUNUCU_IP:/remote-backup/
Cron Job ile Otomatik Zamanlama
Cron Sözdizimi
# ┌───────── Dakika (0-59)
# │ ┌─────── Saat (0-23)
# │ │ ┌───── Gün (1-31)
# │ │ │ ┌─── Ay (1-12)
# │ │ │ │ ┌─ Haftanın günü (0-7, 0/7=Pazar)
# │ │ │ │ │
# * * * * * komut
Cron Job Ekleme
# Cron editörünü aç
crontab -e
# Her gece 03:00'te tam yedekleme
0 3 * * * /root/backup.sh
# Her 6 saatte bir veritabanı yedekleme
0 */6 * * * /root/db_backup.sh
# Her saat başı rsync
0 * * * * /root/rsync_backup.sh
# Her Pazar gece 02:00'de haftalık tam yedek
0 2 * * 0 /root/weekly_backup.sh
Cron Job’ları Listeleme
# Mevcut cron job'ları görüntüle
crontab -l
# Root kullanıcısının cron job'ları
sudo crontab -l
Yedekleri Doğrulama
Yedeklerin çalıştığını düzenli olarak kontrol edin:
# Yedek dosyalarını listele
ls -lh /backup/
# Tar arşivinin bütünlüğünü kontrol et
tar -tzf /backup/backup_20260408_030000.tar.gz > /dev/null && echo "Yedek sağlam" || echo "Yedek bozuk!"
# Veritabanı yedeğini test et (geçici veritabanına geri yükle)
zcat /backup/db/all_db_20260408.sql.gz | mysql -u root -p test_restore_db
Yedekleme Bildirimi (E-posta)
#!/bin/bash
# backup_with_notification.sh
# Yedekleme yap
/root/backup.sh
# Sonucu e-posta ile gönder
if [ $? -eq 0 ]; then
echo "Yedekleme başarılı - $(date)" | mail -s "✅ Sunucu Yedekleme Başarılı" admin@siteniz.com
else
echo "HATA: Yedekleme başarısız! - $(date)" | mail -s "❌ Sunucu Yedekleme BAŞARISIZ" admin@siteniz.com
fi
Oyun Sunucusu Yedekleme Örnekleri
FiveM Sunucusu Yedekleme
#!/bin/bash
# fivem_backup.sh
FIVEM_DIR="/home/fivem-server"
BACKUP_DIR="/backup/fivem"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Veritabanını yedekle
mysqldump -u root -p fivem_db | gzip > "$BACKUP_DIR/fivem_db_$DATE.sql.gz"
# Server dosyalarını yedekle
tar -czf "$BACKUP_DIR/fivem_files_$DATE.tar.gz" \
$FIVEM_DIR/server.cfg \
$FIVEM_DIR/resources/ \
--exclude="$FIVEM_DIR/resources/[system]"
find $BACKUP_DIR -mtime +7 -delete
Minecraft Dünyası Yedekleme
#!/bin/bash
# minecraft_backup.sh
MC_DIR="/home/minecraft"
BACKUP_DIR="/backup/minecraft"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Dünyayı yedekle
tar -czf "$BACKUP_DIR/world_$DATE.tar.gz" $MC_DIR/world/
find $BACKUP_DIR -name "world_*.tar.gz" -mtime +14 -delete
VDS Paket Önerileri
| İhtiyaç | Önerilen Paket | Özellikler |
|---|---|---|
| Basit yedekleme | TR-VDS-2 | 2 Core, 4 GB RAM, 45 GB NVMe SSD |
| Yoğun yedekleme | TR-VDS-8 | 8 Core, 14 GB RAM, 120 GB NVMe SSD |
| Büyük veri yedekleme | R9 - 9 | 8 Core Ryzen, 14 GB RAM, 200 GB NVMe SSD |
Sonuç
Otomatik yedekleme sunucu yönetiminin en kritik parçasıdır. Cron job’lar ve script’ler ile yedekleme sürecini tamamen otomatikleştirebilirsiniz. Yedeklerinizi sunucunun dışındaki bir konumda tutmanızı ve geri yüklemeyi düzenli olarak test etmenizi şiddetle öneriyoruz.
👉 Linux VDS kiralama sayfamızdan hangi dağıtımları kurabileceğinizi görebilir, yedeklerinizi ayrı bir makinede tutmak ve üretim ortamınız için Platinum VDS veya Ryzen VDS seçeneklerimize göz atın!