VDS Sunucuya SSH ile Bağlanma Rehberi (PuTTY & Terminal)
Linux VDS sunucunuza SSH ile bağlanma adımları: PuTTY, Terminal, anahtar tabanlı kimlik doğrulama, Path Panel firewall kuralı ve güvenlik ipuçları.
MySQL ve PostgreSQL veritabanı yedekleme (dump & restore), cron ile otomatik yedekleme, geri yükleme prosedürleri ve en iyi uygulamalar. Veri kaybını önleyin.
Veritabanı yedekleme, sunucu yönetiminin en kritik görevlerinden biridir. Donanım arızası, insan hatası veya siber saldırı durumunda verilerinizi kurtarabilmek için düzenli yedekleme şarttır. Bu rehberde MySQL ve PostgreSQL için yedekleme ve geri yükleme prosedürlerini ele alacağız.
Yedekleme olmadan veri kaybı geri döndürülemez. 3-2-1 kuralını uygulayın: 3 kopya, 2 farklı medya, 1 uzak konum.
# Tek veritabanı yedekle
mysqldump -u root -p veritabani_adi > yedek.sql
# Şifre ile (güvenli olmayan yöntem, script için)
mysqldump -u root -pSIFRE veritabani_adi > yedek.sql
# Tüm veritabanlarını yedekle
mysqldump -u root -p --all-databases > tum_veritabanlari.sql
# Belirli tabloları yedekle
mysqldump -u root -p veritabani_adi tablo1 tablo2 > tablolar.sql
# Sıkıştırılmış yedek
mysqldump -u root -p veritabani_adi | gzip > yedek_$(date +%Y%m%d).sql.gz
# Büyük veritabanları için (transaction ile tutarlı yedek)
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
veritabani_adi > tam_yedek.sql
# Sadece yapı (veri olmadan)
mysqldump -u root -p --no-data veritabani_adi > yapi.sql
# Sadece veri (yapı olmadan)
mysqldump -u root -p --no-create-info veritabani_adi > veri.sql
# Uzak sunucudan yedek
mysqldump -h uzak_sunucu -u kullanici -p veritabani_adi > uzak_yedek.sql
# SQL dosyasından geri yükle
mysql -u root -p veritabani_adi < yedek.sql
# Sıkıştırılmış yedekten geri yükle
gunzip -c yedek.sql.gz | mysql -u root -p veritabani_adi
# Yeni veritabanı oluşturup geri yükle
mysql -u root -p -e "CREATE DATABASE yeni_veritabani;"
mysql -u root -p yeni_veritabani < yedek.sql
# Tüm veritabanlarını geri yükle
mysql -u root -p < tum_veritabanlari.sql
# ~/.my.cnf dosyası oluştur
nano ~/.my.cnf
[client]
user=root
password=SIFRENIZ
host=localhost
# Dosya izinlerini kısıtla
chmod 600 ~/.my.cnf
# Artık şifre girmeden kullanabilirsiniz
mysqldump veritabani_adi > yedek.sql
# Tek veritabanı yedekle
pg_dump -U postgres veritabani_adi > yedek.sql
# Sıkıştırılmış format (önerilen)
pg_dump -U postgres -Fc veritabani_adi > yedek.dump
# Dizin formatı (paralel geri yükleme için)
pg_dump -U postgres -Fd veritabani_adi -f yedek_dizini/
# Tüm veritabanlarını yedekle (roller dahil)
pg_dumpall -U postgres > tum_pg.sql
# Sıkıştırılmış yedek
pg_dump -U postgres veritabani_adi | gzip > yedek_$(date +%Y%m%d).sql.gz
# Belirli şemayı yedekle
pg_dump -U postgres -n public veritabani_adi > public_sema.sql
# Belirli tabloları yedekle
pg_dump -U postgres -t tablo1 -t tablo2 veritabani_adi > tablolar.sql
# Sadece yapı
pg_dump -U postgres -s veritabani_adi > yapi.sql
# Sadece veri
pg_dump -U postgres -a veritabani_adi > veri.sql
# Uzak sunucudan yedek
pg_dump -h uzak_sunucu -U postgres -p 5432 veritabani_adi > uzak_yedek.sql
# SQL formatından geri yükle
psql -U postgres veritabani_adi < yedek.sql
# Özel format (.dump) geri yükle
pg_restore -U postgres -d veritabani_adi yedek.dump
# Paralel geri yükleme (daha hızlı)
pg_restore -U postgres -d veritabani_adi -j 4 yedek.dump
# Yeni veritabanı oluşturup geri yükle
psql -U postgres -c "CREATE DATABASE yeni_veritabani;"
pg_restore -U postgres -d yeni_veritabani yedek.dump
# Sıkıştırılmış yedekten geri yükle
gunzip -c yedek.sql.gz | psql -U postgres veritabani_adi
# ~/.pgpass dosyası oluştur
nano ~/.pgpass
# Format: host:port:database:user:password
localhost:5432:*:postgres:SIFRENIZ
# Dosya izinlerini kısıtla
chmod 600 ~/.pgpass
# /root/scripts/mysql-backup.sh dosyası oluştur
mkdir -p /root/scripts
nano /root/scripts/mysql-backup.sh
#!/bin/bash
# Yapılandırma
DB_USER="root"
DB_PASS="SIFRENIZ"
DB_NAME="veritabani_adi"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# Yedekleme dizini oluştur
mkdir -p $BACKUP_DIR
# Yedek al
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
$DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# Eski yedekleri sil
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Yedekleme tamamlandı: ${DB_NAME}_${DATE}.sql.gz"
# Script'i çalıştırılabilir yap
chmod +x /root/scripts/mysql-backup.sh
# Test et
/root/scripts/mysql-backup.sh
# Crontab'a ekle (her gece 02:00'de)
crontab -e
0 2 * * * /root/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1
#!/bin/bash
# Yapılandırma
DB_USER="postgres"
DB_NAME="veritabani_adi"
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# Yedekleme dizini oluştur
mkdir -p $BACKUP_DIR
# Yedek al
pg_dump -U $DB_USER -Fc $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.dump
# Sıkıştır
gzip $BACKUP_DIR/${DB_NAME}_${DATE}.dump
# Eski yedekleri sil
find $BACKUP_DIR -name "*.dump.gz" -mtime +$RETENTION_DAYS -delete
echo "PostgreSQL yedekleme tamamlandı: ${DB_NAME}_${DATE}.dump.gz"
# rsync ile uzak sunucuya kopyala
rsync -avz /var/backups/mysql/ kullanici@uzak-sunucu:/backup/mysql/
# scp ile tek dosya gönder
scp /var/backups/mysql/yedek.sql.gz kullanici@uzak-sunucu:/backup/
# rclone ile bulut depolamaya gönder (S3, Google Drive, vb.)
rclone copy /var/backups/mysql/ remote:bucket-adi/mysql/
# MySQL yedek dosyasını kontrol et
mysqldump --check veritabani_adi
# Yedek dosyasının boyutunu kontrol et
ls -lh /var/backups/mysql/
# Test veritabanına geri yükleyerek doğrula
mysql -u root -p -e "CREATE DATABASE test_restore;"
mysql -u root -p test_restore < yedek.sql
mysql -u root -p -e "SHOW TABLES;" test_restore
mysql -u root -p -e "DROP DATABASE test_restore;"
Yedekleri düzenli olarak test edin. Geri yükleme yapamadığınız bir yedek işe yaramaz. Ayda en az bir kez test geri yüklemesi yapın.
Düzenli veritabanı yedeklemesi, veri kaybına karşı en önemli savunma hattıdır. MySQL ve PostgreSQL için otomatik yedekleme script'leri kurarak ve yedekleri uzak konumda saklayarak verilerinizi güvende tutabilirsiniz.
mysqldump, MySQL ve MariaDB için kullanılan yedekleme aracıdır. pg_dump ise PostgreSQL'e özgüdür. Her ikisi de SQL formatında çıktı üretir, ancak pg_dump ayrıca özel binary format (-Fc) ve dizin formatı (-Fd) destekler. Binary format daha hızlı geri yükleme ve paralel işlem imkânı sunar.
MySQL için --single-transaction flag'i ile InnoDB tablolarını tutarlı şekilde yedekleyin. PostgreSQL için -Fc (özel format) kullanın ve pg_restore -j ile paralel geri yükleme yapın. Çok büyük veritabanları için Percona XtraBackup (MySQL) veya pg_basebackup (PostgreSQL) gibi araçları değerlendirin.
Kritiklik düzeyine göre değişir: E-ticaret veya finansal veriler için saatlik; blog veya içerik siteleri için günlük yedek yeterlidir. RPO (Recovery Point Objective) hedeflerinize göre belirleyin. Genel öneri: günlük tam yedek + saatlik artımlı yedek.
3-2-1 kuralını uygulayın: 3 kopya, 2 farklı medya türü, 1 uzak konum. Yerel disk + uzak sunucu + bulut depolama (S3, Backblaze B2) ideal kombinasyondur. Aynı sunucuda saklanan yedekler, sunucu arızasında işe yaramaz.
MySQL'de --single-transaction flag'i ile InnoDB tabloları kilitlenmez. MyISAM tabloları için kısa süreli kilit gerekebilir. PostgreSQL'de pg_dump MVCC sayesinde kilitleme yapmaz. Yoğun saatlerde yedekleme yapmaktan kaçının.
Linux VDS sunucunuza SSH ile bağlanma adımları: PuTTY, Terminal, anahtar tabanlı kimlik doğrulama, Path Panel firewall kuralı ve güvenlik ipuçları.
Windows Server VDS sunucunuza Uzak Masaüstü (RDP) ile bağlanma adımları, NLA güvenlik ayarları, Path Panel firewall kuralı ve sorun giderme rehberi.
REXE panel üzerinden VDS sunucunuzun işletim sistemini değiştirme adımları, yedekleme önerileri, desteklenen Linux ve Windows Server sürümleri.