"Veritabanı" ile Alakalı İçerikler

Bir Çakalın Yedekleme Mekanizması

Bu yazıda sizlere bir çakalın yedekleme mekanizmasından bahsedeceğim. Öncelikle şunu belirtmem gerekiyor ki işlemlerin nasıl yapılacağına dair fazla detay vermeyeceğim. Sadece yüzeysel olarak bahsedeceğim. Diğer tüm detaylar zaten yüzlerce sitede var. Her detaya Google ile arayarak ulaşabilirsiniz veya bu yazıya yorum yapabilirsiniz ama doğru cavabı almanız biraz zaman alabilir.

Sahip olduklarımız :

  • Her hangibir Linux sunucu ( host,vps... )
  • Bir google (gmail) hesabı ( veya başka bir sunucuda barındırılan e-posta hesabı )

İşlem Basamakları :

  • Veritabanımızı okumamız için bir kullanıcı açalım ve sadece okuma yetkisi verelim
  • Ev (/home/mopened) dizininizin altında "dbbackup" isminde bir klasör oluşturuyoruz. 
  • Bu oluşturduğumuz dizine giriyoruz ve "dbbackup.sh" isminde bir dosya oluşturuyoruz. 
  • "dbbackup.sh" isimli dosyanın yetkilerini "755" olacak şekilde ayarlıyoruz.
  • "dbbackup.sh" isimli dosyanın içeriğini aşağıdaki gibi yapıyoruz : "/home/mopened" yazan yerleri kendi hesabınızın ev (home) yolu ile değiştirmeyi unutmuyoruz.


#!/bin/bash YYYYMMDD=`date +%Y%m%d` # veya kendi sunucumuzda son bir haftaya ait günlük yedekleri saklamak istiyorsak şöyle yazabiliriz `date +%w%a` rm -rf /home/mopened/dbbackup/$YYYYMMDD.sql.gz # mopened_ReadOnlyUser yazan yere veritabanı kullanıcısının adını yazıyoruz # 123456789 yazan yere veritabanı kullanıcısının şifresini yazıyoruz, p harfine dikkat lütfen, aynen aşağıdaki örnekte olduğu gibi olmalı # mopened_DBName yazan yere veritabanının adını yazıyoruz mysqldump -h localhost -u mopened_ReadOnlyUser -p123456789 mopened_DBName | gzip > /home/mopened/dbbackup/$YYYYMMDD.sql.gz #requires: basename,date,md5sum,sed,sendmail,uuencode function fappend { echo "$2">>$1; } # Aşağıdaki bloktaki yerleri kendimize göre değiştiriyoruz TOEMAIL="posta@alanadiniz.com"; # Yedeğin gönderileceği e-posta adresini buraya yazıyoruz FREMAIL="crondaemon@alanadiniz.com"; # Yedeği gönderiyormuş gibi yapan e-posta adresini buraya yazıyoruz:), Gmaildeki filtreleme olayı için bu adresi kullanacağız. Mümkünse sadece bu işlem için kullanacaağımız bir adres olsun. Gerçekte bu adresin ulaşılabilir olması şart değildir. Yani böyle bir mail hesabınızın olması gerekmiyor. SUBJECT="MOPENED.COM - Günlük Yedek - $YYYYMMDD"; # E-Postanın konusunu buraya yazıyoruz MSGBODY="Merhaba Çakal:), Ekteki dosyayı sakla, yoksa üzülürsün."; # E-postanın içeriğinide buraya yazıyoruz ATTACHMENT="/home/mopened/dbbackup/$YYYYMMDD.sql.gz"; # Değiştirebileceğimiz blok bitti # Bu bloktakileri değiştirmeye gerek yok MIMETYPE="application/x-compressed" TMP="/tmp/tmpfil_123"$RANDOM; BOUNDARY=`date +%s|md5sum` BOUNDARY=${BOUNDARY:0:32} FILENAME=`basename $ATTACHMENT` rm -rf $TMP; cat $ATTACHMENT|uuencode --base64 $FILENAME>$TMP; sed -i -e '1,1d' -e '$d' $TMP;#removes first & last lines from $TMP DATA=`cat $TMP` rm -rf $TMP; fappend $TMP "From: $FREMAIL"; fappend $TMP "To: $TOEMAIL"; fappend $TMP "Reply-To: $FREMAIL"; fappend $TMP "Subject: $SUBJECT"; fappend $TMP "Content-Type: multipart/mixed; boundary=\""$BOUNDARY"\""; fappend $TMP ""; fappend $TMP "This is a MIME formatted message. If you see this text it means that your"; fappend $TMP "email software does not support MIME formatted messages."; fappend $TMP ""; fappend $TMP "--$BOUNDARY"; fappend $TMP "Content-Type: text/plain; charset=UTF-8; format=flowed"; fappend $TMP "Content-Transfer-Encoding: 7bit"; fappend $TMP "Content-Disposition: inline"; fappend $TMP ""; fappend $TMP "$MSGBODY"; fappend $TMP ""; fappend $TMP ""; fappend $TMP "--$BOUNDARY"; fappend $TMP "Content-Type: $MIMETYPE; name=\"$FILENAME\""; fappend $TMP "Content-Transfer-Encoding: base64"; fappend $TMP "Content-Disposition: attachment; filename=\"$FILENAME\";"; fappend $TMP ""; fappend $TMP "$DATA"; fappend $TMP ""; fappend $TMP ""; fappend $TMP "--$BOUNDARY--"; fappend $TMP ""; fappend $TMP ""; #cat $TMP>/home/mopened/dbbackup/mailcontent.txt; # Satırın başındaki # `i silersek mail içeriğini bu dosyaya yazdırabiliriz cat $TMP|/usr/sbin/sendmail -t>/home/mopened/dbbackup/output.txt; # Oluşabilecek gönderim hatalarını bu dosyaya yazdırıyoruz rm $TMP; # Değiştirmemize gerek olmayan blok bitti rm -rf /home/mopened/dbbackup/$YYYYMMDD.sql.gz # Oluşturduğumuz yedek dosyasını sunucumuzdan siliyoruz, Eğer kendi sunucumuzda son bir haftaya ait günlük yedekleri saklamak istiyorsak bu satırı silebiliriz veya başına # koyabiliriz

  • Sunucumuzda son olarak aşağıdaki tablodaki değerlere göre bir zamanlanmış görev oluşturuyoruz. Tabi istekleriniz doğrultusunda değiştirebilirsiniz.
    • Her gün gece saat 3`te çalışması ve bize herhangibir bildirim yollamaması için
      MinuteHourDayMonthWeekdayCommand
      0
      3
      *
      *
      *
      /home/mopened/dbbackup/dbbackup.sh >/dev/null
    • Her gün gece saat 3`te çalışması ve bize işleme dair detayları yollaması için ise şöyle olması gerekiyor. Bunun çalışması için mail adresimizi "Zamanlanmış Görev e-posta adresi" (Cron Email) alanına girmemiz gerekiyor. Bu alan genel "Zamanlanmış Görev" (Cron Jobs) ayarları altındadır.
      MinuteHourDayMonthWeekdayCommand
      03***/home/mopened/dbbackup/dbbackup.sh
  • Şimdi Gmail`i açıyoruz ve "Yedekler" isimli bir etiket oluşturuyoruz. 
  • Ardından Gmail`de bir filtre oluşturuyoruz, detayları ise şöyle :
    • Fitre Detayları :
      • Gönderen = crondaemon@alanadiniz.com
    • İşlem Detayları :
      • Gelen Kutusunu Atla
      • Okundu Olarak İşaretle
      • Etiket Uygula "Yedekler"
      • Sil ( Eğer bize son 1 ay içindeki günlük yedekler yeter diyorsak bunu seçiyoruz, Gmail bu yedekleri bizim için Çöp Kutusunda saklayacaktır:) )
      • Her zaman önemli e-postalara ekle
  • Her şeyin doğru bir şekidle çalıştığını anlamak için Zamanlanmış Görevin (Cron Job) çalışmasını bekliyoruz veya Zamanlanmış Görevde (Cron Job) ufak bir zaman düzeltmesi yapıyoruz:)

 

Şimdi bütün işlemler bitti. Artık veritabanımızın günlük yedeklerini alıyoruz. Hemde masrafsız ve kapasite düşünmeye gerek kalmayacak şekilde. Ama unutmayınız veritabanındaki her şey artık yazdığınız mail adresine gidiyor olacak. Bu yüzden güvenliğini arttırmak iyi olacaktır. Google`ın 2 adımlı doğrulama yönetmini kullanmanızı tavsiye ederim. Aryıca belirtmek isterim ki anlayacağınız üzere sadece veritabanının yedeğini aldık. Dosyalar sürekli değişmediği için zaman zaman manuel olarak yedekleri alınabilir. Tabi eğer isterseniz yine aynı yöntemle bu işlemide gerçekleştirebilirsiniz ama dosyaların boyutuna bağlı olarak sunucuya çok fazla yük bindirme olasığı var. Ayrıca her gün yüzlerce mb veriyi mail olarak atmak çokta mantıklı değil sanırım. Bunun için başka bir sunucunuza ftp ile transfer etmeniz daha uygun görülebilir.

Her yiğidin yoğurt yiyişi farklıdır. İsteklerine, elindekilere ve düşüncelerine göre yöntemleride değişir. Yoğurt yemeyen birisi olarak benim yöntemim budur:). Şuanki durumum için en ideal çözüm bu sanırım.  


Devamını Oku ⇒