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
Minute Hour Day Month Weekday Command 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.
Minute Hour Day Month Weekday Command 0 3 * * * /home/mopened/dbbackup/dbbackup.sh
- Her gün gece saat 3`te çalışması ve bize herhangibir bildirim yollamaması için
- Ş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
- Fitre Detayları :
- 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.