Powershell ile Site ve Veritabanı Yedekleme

Geçenlerde yapmam gereken ama imkanların oldukça kısıtlı olduğu bir yedekleme senaryosunu sizinle paylaşacağım. Bu senaryoda 3. parti bir yazılım kullanamıyoruz. Olabildiğince native takılıyoruz anlayacağınız.

Uzaktan yönetilen fiziksel Windows tabanlı sunucuda herhangi bir yönetim paneli (plesk vs) bulunmuyor. Bu sunucu üzerinde bir web uygulaması ve uygulamanın veri işlemleri için kullandığı Sql Server bulunmakta. Haliyle yedeklemenin kapsamı hem uygulama dosyaları hem de veritabanı.

Kabaca planım şu;
Uygulamanın kök dizinine veritabanının yedeğini almak ve akabinde kök dizini sıkıştırıp bir zip dosyası elde etmek. Final de ise veritabanı yedek dosyasını kök dizinden silmek. Bundan sonrasında site sahibi dosyaya istediğini yapabilir :)


Powershell ile başlayalım. Kopi peyst için link.

Yukarıda ki kodları kısaca inceleyelim.

  1. Zip işlemi için gerekli referansı ekliyoruz.
  2. Oluşacak yedek dosyası için tarih bazlı bir isim oluşturuyoruz. Örneğin “23_12_2016.zip”
  3. Veritabanı yedeği oluşturuyoruz. İşlemin Windows yetkilendirme ile yapıldığını unutmayın.
  4. Kök dizinini içinde veritabanı yedeği ile birlikte sıkıştırıyoruz.
  5. Kök dizinden veritabanı dosyasını siliyoruz.
PS ile arşivleme işlemi, .Net Framework System.IO.Compression.ZipArchive API’ sini kullanır. Bu da max 2GB dosya uzunluğu üzerinde işlem yapmanıza olanak verir.

Senaryo gereği son aşama script dosyamızın belirli zaman aralıkları ile çalıştırılmasını sağlamak . Bunun için en uygun araç Task Scheduler. Zaten baştan beri amacımız her işi olabildiğinde mevcut araç gereç ile yapmak.

Şimdi Task Scheduler uygulamasını açarak adım adım ilerleyelim.

Kısayol : Win+ R ↵ Taskschd.msc

İlk olarak Create Task ile yeni bir görev oluşturalım.

Hatırlaması kolay bir isim verelim. Açıklama alanı şart değil boş geçilebilir. Arka plan uygulamaları gibi kullanıcı oturumuna ihtiyaç duymaması için 2. seçeneği yani “Oturum açılmasa da çalıştır” seçeneğini seçelim. Bu en son kısımda tekrar karşımıza çıkacak. Ok ile devam edelim şimdilik.

Yeni bir Trigger oluşturalım.

Ekranda da görüldüğü üzere Trigger lar iş parçacıklarının hangi zaman aralıkları ile çalışacağını ifade eder. Bu örnek için her gün saat 23:00 de çalışmasını söylüyoruz.

Sırada yeni bir Action oluşturma var.

Burada da amaç hangi uygulamanın yada komutun çalıştırılacağını belirtmek. Bizim amacımız bir Powershell script dosyasını çalıştırmak olduğu için -file parametresi ile script dosyasının yolunu belirtiyoruz.

İşlemi sonlandırırken ilk başta yapmış olduğumuz seçeneğe istinaden bizden bir oturum açma bilgisi istenecektir. Bu bilgi sayesinde sunucunuz yeniden başlasa bile herhangi bir oturum açılmasına gerek kalmadan görev çalışabilecektir.

Burada anlattıklarım farklı ihtiyaçlara göre çeşitlendirebilir. Umarım bu senaryo size az da olsa bir fikir vermiştir.

Sağlıcakla.