Blog’a Dön

Sunucu Yedekleme: 3-2-1 Kuralı ve Yöntemler

Sunucu yedekleme nasıl yapılır? 3-2-1 kuralı, snapshot ve dosya yedeği farkı, veritabanı yedekleri, restic ile şifreli uzak yedek ve geri yükleme testi.

Nodesty Ekibi5 dk okumaGüvenlik
Koyu Nodesty arka planında Backups yazısı ile 3-2-1, Snapshots ve Restore ifadeleri

Sunucu yedekleme, sunucunuzdaki dosyaların, veritabanlarının ve ayarların bir kopyasını düzenli olarak alıp başka bir yerde saklamaktır. Bir disk arızası, yanlışlıkla silinen bir klasör, hatalı bir güncelleme ya da fidye yazılımı saldırısı birkaç saniyede aylarca emeği yok edebilir. İyi bir yedek düzeni, bu durumlardan birkaç dakikada geri dönebilmek demektir.

Bu rehberde 3-2-1 kuralını, yedek türlerini, veritabanlarının nasıl yedeklenmesi gerektiğini, restic ile şifreli uzak yedek almayı, otomasyonu ve en çok ihmal edilen adımı, geri yükleme testini anlatıyoruz.

Neden yedek almalısınız?

Veri kaybının sebepleri sanıldığından çok daha sıradandır:

  • İnsan hatası: Yanlış klasörde çalıştırılan bir rm -rf, yanlışlıkla silinen bir tablo ya da üzerine yazılan bir ayar dosyası. En sık sebep budur.
  • Hatalı güncellemeler: Bir eklenti, mod ya da yazılım güncellemesi veritabanını bozabilir.
  • Saldırılar: Ele geçirilen bir sunucuda saldırganlar verileri siler ya da fidye yazılımıyla şifreler.
  • Donanım arızası: Diskler, en iyi veri merkezlerinde bile bozulabilir.
  • Hesap sorunları: Ödeme sorunu ya da erişim kaybı yüzünden sunucunuza ulaşamamak.

Bu sebeplerin çoğuna karşı sağlayıcının donanımı ne kadar güvenilir olursa olsun tek çözüm, verinin başka bir yerde de bulunmasıdır.

3-2-1 yedekleme kuralı

Yedeklemede en çok kabul gören kural basittir:

  • 3 kopya: Asıl veri ve iki yedek.
  • 2 farklı ortam: Örneğin sunucunun kendi diski ve ayrı bir depolama.
  • 1 kopya başka bir yerde: Farklı bir veri merkezinde ya da farklı bir sağlayıcıda.

Bir sunucu için pratikte bu şu anlama gelir: Asıl verileriniz sunucuda durur, sağlayıcınızın otomatik yedekleri ikinci kopyayı oluşturur, sizin başka bir sağlayıcıya gönderdiğiniz şifreli yedekler de üçüncü kopyayı. Bugün bu kurala sıklıkla bir şart daha eklenir: Kopyalardan en az biri değiştirilemez (immutable) ya da sunucudan silinemez olmalıdır; böylece sunucuyu ele geçiren bir saldırgan yedekleri de silemez.

Yedek türleri

TürNe yedeklenir?AvantajıDezavantajı
Sunucu yedeği / snapshotDiskin tamamıTüm sunucuyu tek seferde geri getirirTek bir dosyayı geri almak daha zahmetlidir
Dosya yedeğiSeçilen klasörlerEsnek, küçük, tek dosya geri yüklenebilirNeyin yedekleneceğini sizin seçmeniz gerekir
Veritabanı dökümüVeritabanının tutarlı bir kopyasıTutarlı, taşınabilirYalnızca veritabanını kapsar

En sağlam düzen bunları birlikte kullanmaktır: Sağlayıcının sunucu yedeği hızlı bir felaket kurtarma sağlar; dosya ve veritabanı yedekleri ise tek bir dosyayı ya da tabloyu geri getirmek ve başka bir sunucuya taşınmak için esneklik verir.

Neleri yedeklemelisiniz?

  • Uygulama ve site dosyaları: /var/www, oyun sunucusu klasörleri, bot kodları ve kullanıcıların yüklediği içerikler.
  • Veritabanları: Dosya kopyası olarak değil, veritabanının kendi aracıyla alınan döküm olarak.
  • Ayar dosyaları: /etc altındaki Nginx, servis ve güvenlik duvarı ayarları; .env dosyaları; crontab -l çıktısı.
  • Docker verileri: Compose dosyaları ve volume'lar ya da bağlı klasörler.

İşletim sisteminin kendisini ve yeniden indirilebilen dosyaları (örneğin oyun sunucusunun SteamCMD ile indirilen dosyaları) dosya yedeğine eklemeniz gerekmez; yalnızca sizin oluşturduğunuz veriler ve ayarlar önemlidir.

Veritabanlarını doğru yedeklemek

Çalışan bir veritabanının dosyalarını kopyalamak, açılamayan bir yedeğe yol açabilir. Önce veritabanının kendi aracıyla bir döküm alın, ardından bu dökümü dosya yedeğinize dahil edin:

mariadb-dump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz

PostgreSQL kullanıyorsanız aynı işi pg_dump yapar. MariaDB kurulumu ve yedeklemesini MySQL ve MariaDB kurulumu rehberimizde ayrıntılı anlattık.

restic ile şifreli uzak yedek

restic, açık kaynaklı ve ücretsiz bir yedekleme aracıdır. Yedekleri şifreler, tekrar eden verileri yalnızca bir kez saklar (deduplication) ve her yedekte yalnızca değişen kısımları gönderir. Yedekleri başka bir sunucuya SFTP üzerinden ya da S3 uyumlu bir nesne depolamaya gönderebilir.

  1. restic'i kurun:
    sudo apt install restic
    
  2. Şifreleme parolasını bir dosyaya yazın ve yalnızca root'un okuyabileceği şekilde koruyun:
    sudo sh -c 'openssl rand -base64 32 > /root/.restic-parola'
    sudo chmod 600 /root/.restic-parola
    

    Bu parolayı ayrıca güvenli bir yere kaydedin. Parola olmadan yedekler açılamaz.
  3. Başka bir sunucuda yedek deposunu oluşturun. Örneğin SFTP ile:
    sudo restic -r sftp:yedek@198.51.100.20:/srv/restic init --password-file /root/.restic-parola
    
  4. İlk yedeği alın:
    sudo restic -r sftp:yedek@198.51.100.20:/srv/restic --password-file /root/.restic-parola \
      backup /var/www /etc /var/backups
    
  5. Eski yedekleri bir saklama düzenine göre temizleyin:
    sudo restic -r sftp:yedek@198.51.100.20:/srv/restic --password-file /root/.restic-parola \
      forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
    

Bu düzen son 7 günün, son 4 haftanın ve son 6 ayın birer yedeğini tutar. SFTP bağlantısı için sunucunuzun yedek sunucusuna şifresiz, anahtarla bağlanabilmesi gerekir; SSH anahtarı oluşturmayı SSH nedir? yazımızda anlattık.

Yedeklemeyi otomatikleştirmek

Elle alınan yedek, bir gün mutlaka unutulur. Adımları bir betikte toplayın, örneğin /root/yedekle.sh:

#!/bin/sh
set -e
REPO="sftp:yedek@198.51.100.20:/srv/restic"
PASS="/root/.restic-parola"

mariadb-dump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
restic -r "$REPO" --password-file "$PASS" backup /var/www /etc /var/backups
restic -r "$REPO" --password-file "$PASS" forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Betiği çalıştırılabilir yapıp sudo crontab -e ile her gece çalıştırın:

30 3 * * * /root/yedekle.sh >> /var/log/yedekle.log 2>&1

Günlük dosyasını ara sıra kontrol edin ya da yedekleme başarısız olduğunda size bildirim gönderen bir izleme servisi kullanın. Sessizce başarısız olan bir yedekleme, hiç olmayan bir yedeklemeyle aynıdır.

Geri yüklemeyi test edin

Test edilmemiş bir yedek, gerçekten çalışıp çalışmadığını bilmediğiniz bir yedektir. Ayda bir şu kontrolleri yapın:

  • Yedekleri listeleyin: restic snapshots ile yedeklerin düzenli alındığını görün.
  • Bir dosyayı geri yükleyin: restic restore latest --target /tmp/test --include /var/www/site/index.php ile tek bir dosyayı geri getirip içeriğini kontrol edin.
  • Veritabanı dökümünü deneyin: Dökümü test amaçlı ayrı bir veritabanına yükleyip tabloların geldiğini görün.
  • Bütünlüğü kontrol edin: restic check deponun sağlam olduğunu doğrular.

Daha da iyisi, yılda birkaç kez boş bir sunucuya her şeyi sıfırdan geri yüklemeyi deneyin. Gerçek bir felakette ne kadar sürede geri dönebileceğinizi ancak böyle öğrenirsiniz.

Nodesty'de yedekleme

Nodesty AMD Ryzen 9 9950X VDS ve EPYC VDS paketlerinde 7 gün saklanan ücretsiz otomatik günlük yedekleme bulunur ve panelden açılıp kapatılabilir. Web hosting paketlerinde JetBackup ile yedeklerinize kontrol panelinden ulaşırsınız; oyun sunucularında da günlük yedekler 7 gün saklanır. Bu yedekler 3-2-1 kuralındaki ikinci kopyayı sağlar. Önemli verileriniz için bu rehberdeki gibi bağımsız bir kopyayı başka bir yerde tutmanızı öneririz.

Sıkça Sorulan Sorular

Sağlayıcının yedekleri yeterli değil mi?

Sağlayıcı yedekleri donanım arızalarına ve yanlışlıkla yapılan değişikliklere karşı çok değerlidir, ama tek yedeğiniz olmamalıdır. Hesabınıza erişimi kaybetmek, yedeklerin saklama süresinden eski bir soruna geç fark etmek ya da sunucuyla birlikte yedeklere de ulaşan bir saldırgan gibi durumlara karşı sağlayıcıdan bağımsız bir kopya gerekir.

Ne sıklıkla yedek almalıyım?

Kaybetmeyi göze alabileceğiniz en uzun süreye göre karar verin. Gün içinde sık değişen bir e-ticaret veritabanı için saatlik yedek gerekebilir; haftada bir güncellenen bir tanıtım sitesi için günlük yedek fazlasıyla yeterlidir. Oyun sunucularında günlük yedek ve büyük güncellemeler öncesinde elle alınan yedek iyi bir dengedir.

Yedekleri ne kadar süre saklamalıyım?

Yalnızca son birkaç günü saklamak, fark edilmesi geç olan sorunlara karşı koruma sağlamaz. Yaygın bir düzen son 7 günlük yedeği, son 4 haftanın birer yedeğini ve son birkaç ayın birer yedeğini tutmaktır. restic gibi araçlar bu düzeni tek komutla uygular.

RAID yedek yerine geçer mi?

Hayır. RAID, bir disk arızalandığında sunucunun çalışmaya devam etmesini sağlar. Ancak silinen bir dosya, bozulan bir veritabanı ya da fidye yazılımıyla şifrelenen veriler bütün disklere aynı anda yansır. RAID kesintisiz çalışma içindir; yedek ise geri dönebilmek içindir.

Çalışan bir veritabanının dosyalarını kopyalamak yeterli mi?

Genellikle hayır. Veritabanı çalışırken dosyaları kopyalamak tutarsız ve açılamayan bir yedeğe yol açabilir. mariadb-dump ya da pg_dump gibi veritabanının kendi araçlarıyla bir döküm alın ve dosya yedeğinize bu dökümü dahil edin.

Yedeklerimi şifrelemem gerekir mi?

Yedekler müşteri verileri, şifreler ve API anahtarları gibi hassas bilgiler içerir. Başka bir sağlayıcıda ya da bulut depolamada tutulan yedekleri mutlaka şifreleyin. restic ve Borg gibi araçlar yedekleri varsayılan olarak şifreler; şifreleme parolasını da yedeklerden ayrı ve güvenli bir yerde saklayın.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································