Uzun bir aradan sonra ne üzerine yazsam diye düşünürken bir yazılımcı için en önemli kavramlardan biri olan "yedekleme ve geri yükleme" konusunu yazmanın en doğru konu olduğunu düşündüm. Bugün, online servisler arasında bir çok projeyi batırmış olmasına rağmen güzel yenilikler sunmayı başaran Google'ın Cloud Storage hizmetinden bahsedip, Linux serverlar için kurabileceğiniz bir yedekleme düzeneği kurmayı göstermeyi planlıyorum.

Öncelikle şunu belirteyim Google'ın Cloud servisleri arasında sadece Cloud Storage yok Cloud Datastore, Cloud SQL vs.. bir çok hizmeti bulunmakta ve şu anda 120 günlük deneme hesabı oluşturup 3 ay boyunca ücret ödemeden bu hizmetleri test edebiliyorsunuz. Ücretli versiyonu ise Cloud Storage için çok çok ucuz denilebilir. Yaklaşık 70 gb'lık veriyi aylık 2, 3$ gibi bir miktara rahatlıkla cloud ortamında saklayabilirsiniz.

Google Cloud'u yeteri kadar övdüğümüze göre konuya başlayabiliriz.

Öncelikle Cloud nedir bundan biraz bahsedelim.


Cloud'un Türkçedeki tam karşılığı "bulut" Cloud computing'i ise tam Türkçeye çevirmeyi denersek bulut bilişim şeklinde çevirebiliriz. Peki nedir bu bulut bilişim ? Özet geçecek olursak mevcut veriye erişimi kolaylaştırıp, uptime'ı arttırmaktır. Siz burada sadece data saklamak için kullanabileceğiniz gibi, Kullandığınız servislere göre hız da elde edebilirsiniz. Örneğin CloudFlare cloud olayını kullanan firmalardan biri. Mevcut sitenizi cacheleyip statik olan kısımlarını Dünya'nın çeşitli yerlerindeki serverlarında saklayıp, ziyaretçilere kendilerinin en yakın olduğu serverdan cevap döndürerek TimeOut süresini kısıtlayıp, siteye daha hızlı erişmesini sağlıyor.

Kurulum işlemi


Konumuz Google Cloud Storage olduğu için fazla uzatmayıp, Google Cloud Storage'ın kullanımından bahsedicem.

Kurulum işlemini Google'dan daha iyi anlatabileceğimi düşünmüyorum. Kendileri zaten burada kurulumu anlatmış bulunmaktalar. Yine de takıldığınız kısmı yorumlardan sorarak belirtirseniz yardımcı olmaya çalışırım.

Burada kurmuş olduğumuz yazılım gsutil adı verilen Google Cloud Storage hesabımızı tam anlamıyla yönetebileceğimiz bir yazılım. Windows'a kurmadan önce bilgisayarınıza python kurmanız gerekmekte.

Kurulumu gerçekleştirdikten sonra yapmanız gereken işlem Bucket adı verilen bir nevi klasörleme yapısını oluşturmak.

Bu aşamada neleri yedeklemeniz gerektiğini planlamanız gerekmekte. Normal bir web server için public_html klasörünün altı olarak adlandırabileceğimiz web sitenizin dosyaları ve veritabanı yeterlidir. Bunları ayrı klasörlerde tutmak, sizin yararınıza olacaktır.

Bu yüzden benim önerim: files ve db adı altında iki adet bucket oluşturmanız yönünde.

Bucketları oluşturdunuz, Yedekleme yapacağınız klasörler belirli, sıra geldi Linux için ilgili bash scriptini oluşturmaya. Bunun için çeşitli kombinasyonlar oluşturabilirsiniz. Örneğin haftalık, aylık ayrı klasörler oluşturup yedeklemeyi bu klasörler altından takip edebilirsiniz. Benim burada vereceğim örnek daha ziyade bugün tarihli olarak yedekleri upload etmek şeklinde olacaktır.

Bu bash scriptlerini sh olarak kayıt etmeniz yeterlidir.

İlk etapta public_html'in altını yedekleyelim;


#!/bin/sh -x
#PATH=/root/gsutil
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export BOTO_CONFIG="/root/.boto"
#Tarihi bulalım
NOW=$(/bin/date +"%d-%m-%Y")
#Localde aldığımız yedeklerden 3 gunden eski olanlari silelim
/bin/find /home/admin/backups/files -type f -mtime +3 -delete
#Public html klasörümüzü sıkıştıralım
/bin/tar czfP /home/admin/backups/files/files_$NOW.tar.gz /home/admin/domains/merdincz.com/public_html/
#Klasoru Google Cloud Storage'a aktaralım
/root/gsutil/gsutil cp -c /home/admin/backups/files/files_$NOW.tar.gz gs://lwebserver/files/daily/




Kod satırlarına zaten elimden geldiğince açıklamayı yazmaya çalıştım. Dilerseniz bunu geliştirebilirsiniz. Örneğin sadece son 1 haftalık yedeği tutmak isterseniz (bu sizin maaliyetinizi düşürecektir) Kodu aşağıdaki şekilde düzenlemeniz yeterlidir.

Sadece bir haftalık yedek için;


#!/bin/sh -x
#PATH=/root/gsutil
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export BOTO_CONFIG="/root/.boto"
#Tarihi bulalım
NOW=$(/bin/date +"%d-%m-%Y")
#Localde aldığımız yedeklerden 3 gunden eski olanlari silelim
/bin/find /home/admin/backups/files -type f -mtime +3 -delete
#Public html klasörümüzü sıkıştıralım
/bin/tar czfP /home/admin/backups/files/files_$NOW.tar.gz /home/admin/domains/merdincz.com/public_html/
#Klasoru Google Cloud Storage'a aktaralım
/root/gsutil/gsutil cp -c /home/admin/backups/files/files_$NOW.tar.gz gs://lwebserver/files/daily/
#Gecen hafta bugunu bul
LASTWEEK=$(/bin/date -dlast-week +"%d-%m-%Y")
#Gecen hafta bugunun tarihini bul
LASTWEEKDAY=$(/bin/date -dlast-week +"%d")
if [ "$LASTWEEKDAY" != "01" ]
then
#RaWiki icin gecen hafta bugunun dosyayi sil
/root/gsutil/gsutil -m rm -fa gs://lwebserver/files/files_$LASTWEEK.tar.gz
fi




Son 1 haftayı yedekleyip, cloud'da 1 haftadan eski dosyaları sildik.
Şimdi aynı işlemi database yedeklemek için yapalım;
#!/bin/sh -x
#PATH=/root/gsutil
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export BOTO_CONFIG="/root/.boto"
#Tarihi bulalım
NOW=$(/bin/date +"%d-%m-%Y")
#Localde aldığımız yedeklerden 3 gunden eski olanlari silelim
/bin/find /home/admin/backups/db -type f -mtime +3 -delete
#Public html klasörümüzü sıkıştıralım
/usr/bin/mysqldump --user=admin_user --password=password --host=127.0.0.1 db_name | /usr/bin/gzip > /home/admin/backups/db/db_$NOW.sql.gz
#Klasoru Google Cloud Storage'a aktaralım
/root/gsutil/gsutil -m cp -c -n /home/admin/backups/db/db_$NOW.sql.gz gs://radb/wikis/db/
#Gecen hafta bugunu bul
LASTWEEK=$(/bin/date -dlast-week +"%d-%m-%Y")
#Gecen hafta bugunun tarihini bul
LASTWEEKDAY=$(/bin/date -dlast-week +"%d")
if [ "$LASTWEEKDAY" != "01" ]
then
#Gecen hafta bugunun dbsini sil
/root/gsutil/gsutil -m rm -fa gs://lwebserver/db/db_$LASTWEEK.sql.gz
fi


Ne yaptık ?



3 günden eski db yedeklerini silip, bugün tarihli yeni mysql yedeği aldık, bunu google cloud storage'a kayıt ettik. Sonuç itibarıyla elimizde sürekli 1 haftalık yedeğimiz olmuş oldu.

Dilediğiniz zaman Google Cloud Console'undan dosyaları indirebilirsiniz aynı şekilde dosyaları gsutil aracılığıyla da download edebilirsiniz. Sadece kopyalama klasörlerini değiştirmeniz gerekiyor.

buradan dilerseniz gsutil'e ait tüm komutları ve kullanım yöntemlerini görebilirsiniz.

Ben burada sizlere daha çok kopyala, yapıştır mantığıyla yedekleme konusunu anlattım anlık olarak sürekli veri almanız gerektiği durumlarda rsync komutunu kullanabilir, localinizde ilgili dosya silinse de sync sırasında cloud'dan silinmesini engelleyebilirsiniz.

Yedekleme sistemi mantığı tamamen size kalmış durumda.

Makalemi yedekleme sistemi üzerine söylenmiş güzel bir sözle bitirmek istiyorum. "Don’t ever, ever plan a backup strategy. Plan a restore strategy." Paul Randal adlı bir arkadaş tarafından söylenmiş.

Türkçeye çevirirsek yaklaşık olarak: "Yedekleme planından önce, geri yükleme planı oluşturmalısınız".