
Linux Sunucuda Otomatik Yedekleme Nasıl Yapılır? Cron ve Script Rehberi
Linux VDS otomatik yedekleme rehberi. Cron job ile zamanlanmış yedekleme, rsync kullanımı, veritabanı yedekleme ve uzak sunucuya yedek gönderme adım adım anlatım.
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
💡 White Bilişim tüm VDS paketlerinde ücretsiz günlük otomatik yedekleme sunmaktadır. Buna ek olarak kendi yedekleme stratejinizi de oluşturmanızı öneriyoruz.
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.shYö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 -deletePostgreSQL 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ı." >> $LOGUzak 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.shCron Job’ları Listeleme
# Mevcut cron job'ları görüntüle
crontab -l
# Root kullanıcısının cron job'ları
sudo crontab -lYedekleri 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_dbYedekleme 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
fiOyun 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 -deleteMinecraft 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 -deleteVDS Paket Önerileri
| İhtiyaç | Önerilen Paket | Özellikler |
|---|---|---|
| Basit yedekleme | ENT-2 | 2 Core, 4 GB RAM, 40 GB SSD |
| Yoğun yedekleme | ENT-5 | 8 Core, 10 GB RAM, 100 GB SSD |
| Büyük veri yedekleme | PRO-4 | 8 Core Ryzen, 10 GB RAM, 100 GB 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. White Bilişim tüm VDS paketlerinde ücretsiz günlük yedekleme sunar, ancak kendi yedekleme stratejinizi de oluşturmanızı şiddetle öneriyoruz.
👉 Yedekleme dahil VDS paketleri için Xeon Enterprise VDS veya Ryzen Premium VDS seçeneklerimize göz atın!