GoDaddy Üzerinde Cron Job ile MySQL Veritabanlarının Otomatik Yedeklenmesi

Sorumluluğunuzda birçok web sayfası ve veritabanı varsa bu veritabanlarının yedeklerinin alınması sıkıcı bir işe dönüşebilir. Neyse ki bu işleri otomatik yapmanızı sağlayacak mysqldumper ve Cron gibi güçlü araçlar var. GoDaddy Linux Shared Hosting kullanıcılarının, bu araçları kullanarak veritabanlarının yedeğini hızlı ve kolay bir şekilde nasıl alabileceklerini aktarmaya çalışacağım.

İsterseniz önce mysqldumper ve Cron’u çok kısaca tanıyalım.

mysqldumper: PHP ve Python ile yazılmış bir veritabanı yedekleme aracıdır.

Kendinize ait, WordPress tabanlı bir içerik yönetim sistemi kullanıyorsanız BackWPup, WP-DB-Backup gibi otomatik yedekleme eklentileri kullanıyor olabilirsiniz, ancak yüklediğiniz her eklentinin web sayfanızın daha geç açılmasına neden olduğunu, güvenlik açığı barındırabileceğini ve düzenli olarak takip edilerek güncellemelerinin yapılması gerektiğini unutmayın. Ayrıca, veritabanınız zamanla çok büyük bir hale geldiğinde bu eklentiler yeterli olmayabilir. Zira PHP’nin varsayılan betik çalıştırma zamanı (script execution time) sınırı 30 saniyedir ve bu süre büyük bir veritabanını yedekleyebilmek için yeterli olmayabilir. Bu süreyi php.ini dosyasından daha yüksek bir değere çekebilirsiniz. Paylaşımlı bir sunucu kullanıyorsanız, bu süreyi (30 sn) yüksek bir değere çekmenize müsade edilmiyor olabilir. Örneğin GoDaddy Linux Shared Hosting için bu süre en fazla 120 saniyedir. İşte tam burada mysqldumper devreye girer ve özel algoritması ile veritabanını parçalara ayırarak ayrı ayrı (işlemin hangi parçanın neresinde yarım kaldığını bilir ve tam olarak kaldığı yerden devam eder) yedekler ve sonra bu parçaları bir araya getirir. Ortaya tek bir dosya çıkar ve bu dosya veritabanınızın eksiksiz bir yedeğidir. Bazı indirme programlarının veya torrent programlarının, indireceğiniz dosyayı parçalara ayırarak indirmesi ve sonra bu parçaları birleştirmesi gibi düşünebilirsiniz. Böylelikle veritabanı çok büyük de olsa, bu parçalar PHP’nin betik çalıştırma zamanı sınırı içerisinde yapılır ve hata mesajı almazsınız.

Cron: Unix/Linux işletim sistemlerinde işlerin (komutların veya kabuk betiklerinin) belirli zamanlarda çalışmasını sağlayan programın adıdır. Cron kullanarak veritabanının hangi zamanlarda, hangi aralıklarda yedeklenmesi gerektiğini sunucuya söyleyebiliriz.

GoDaddy, web sayfanızdaki tüm dosyalarınızın düzenli olarak yedeğini alan harika bir hizmet sunuyor. Öyle ki, istediğiniz gün ve saate geri dönmek  istediğinizde, anında o tarih ve saate dönebiliyorsunuz. Ancak GoDaddy Paylaşımlı Hosting’in en önemli eksiği veritabanı yedeklemesi konusunda. Kullandığınız veritabanlarının yedeği otomatik olarak alınamıyor. Elle yedek almanız gerekli ama her gün bu işlemi yapmak büyük bir zaman ve emek kaybının yanında çok da sinir bozucu bir durum :)

Bir web sayfasının dosyalarının yedeklerinin alınması tek başına hiç bir işe yaramıyor zira içerik ve birçok önemli bilgi veritabanı üzerinde tutuluyor. Bu nedenle hem dosyaların hem de veritabanının yedeklenmesi gerekiyor.

GoDaddy’nin Destek (Support) sayfaları malesef Cron kullanarak yedeklemenin nasıl yapılacağı hakkında açıklayıcı bilgiler içermiyor. Açıkçası böyle bir detayı GoDaddy’nin destek sayfalarından beklemek de ne kadar doğru bilemiyorum. Bu nedenle yazının size yedekleme konusunda tam bir kılavuz olacağını ümit ediyorum.

Yedekleyeceğimiz her bir veritabanının Host Name (sunucu adı), Database Name (veritabanı adı), User Name (kullanıcı adı), Password (şifre) bilgileri gerekli (doğal olarak). Bu bilgilere nereden ulaşabiliriz?

GoDaddy’de oturum açtıktan sonra “My Products” sayfasında “Web Hosting” sekmesine ve “Launch” butonuna tıklayın. Yeni bir sekmede “Control Panel” sayfası açılır.

Hosting Details sayfasındayken sayfanın altlarına doğru Databases (Veritabanları) sekmesinde “MySQL” butonuna tıklayın. “Manage Databases” başlığıyla yeni bir sayfa açılacak.

Manage Databases sayfasında yedeğini almak istediğimiz veritabanının sağındaki “Actions” butonuna tıkladığımızda açılan menüden “Details” seçeneğine tıklayalım.

Açılan yeni pencerede veritabanı adı (database name), kullanıcı adı (username), veritabanı sunucu adı (hostname) bilgilerine ulaşabilirsiniz. Şifre görünmeyecektir. Daha önce şifreyi mutlaka güvenli bir yere kaydetmiş olduğunuzu varsayıyorum. Dikkat ettiniz mi? GoDaddy’de veritabanı adı ile kullanıcı adı aynı.

Yedeğini alacağınız her bir veritabanı için tek tek hostname, database name ve username bilgilerini bir kenara not alın.

Yedeklerimizi ve Cron betiklerimizi saklayacağımız bir klasör oluşturalım: “_db_backups”. Bu klasör GoDaddy’nin standart olarak kullandığı bir klasördür. Daha önce böyle bir klasör oluşturulmuş ise aynı klasörü kullanabilirsiniz.

Şimdi de MySQL veritabanı bağlantı bilgilerini kullanarak FTP File Manager (FTP Dosya Yöneticisi) ile kabuk betiği (shell script) oluşturalım.


#!/bin/bash
/usr/bin/mysqldump -h xxxxxxxxx.db.9876543.hostedresource.com -u kullanici_ismi -pParola1234 veritabani_ismi-1 | gzip > $HOME/html/_db_backups/veritabani_ismi-1_`date ‘+%Y-%m-%d_%H-%M’`.sql.gz
/usr/bin/mysqldump -h xxxxxxxxx.db.1234567.hostedresource.com -u kullanici_ismi -pSifre1234 veritabani_ismi-2 | gzip > $HOME/html/_db_backups/veritabani_ismi-2_`date ‘+%Y-%m-%d_%H-%M’`.sql.gz
/usr/bin/find $HOME/html/_db_backups/ -name ‘*.gz’ -mtime +6 -exec rm {} \; >> $HOME/html/_db_backups/purge.log 2>&1

Yukarıdaki betik bazı özel karakterler içerdiği için kendi kendinize yazmaya çalışmayın. backup.sh dosyasını (zip dosyasının içinde) indirip kopyala/yapıştır yöntemi ile kullanın ve kendinize göre özelleştirin aksi halde Cron Job size “^M:bad interpreter:No such file or directory” gibi bir uyarı maili gönderebilir.

Bu betik verilen paremetrelere göre mysqldump’ı çalıştırır. Veritabanlarının yedeğini alır, dosya isimlerinin sonuna tarih ve saat bilgisini ekler ve daha sonra da dosyanın çok yer kaplamaması için dosyayı sıkıştırır.

Betik dosyasını satır satır irdeleyelim:

ilk satır “#!/bin/bash” dosyanın bir kabuk betiği olduğunu gösterir.

ikinci satırda mysqldump, aşağıdaki parametrelerle çalıştırılır:

  • -h bağlanılacak sunucunun adresi

  • -u kullanıcı adı

  • -pParola (DİKKAT! p harfi ile Parola arasında boşluk olmadığına dikkat edin!)

böylelikle “veritabani_ismi-1.sql” adında bir dosya oluşturulur. Aynı satırda, bu çıktı (dosya) gzip komutu ile sıkıştırılır ve “_db_backups” klasörünün içine kopyalanır. “`date ‘+%Y-%m-%d_%H-%M’`” komutu sayesinde dosyanın yeni ismi “veritabani_ismi-1_2013-07-06_19-25.sql.gz” şekline dönüşür. Böylelikle yedeğin hangi tarihte ve saatte alındığını daha kolay bir şekilde görebiliriz. Anlaşılacağı üzere %Y yıl, %m ay, %d gün, %H saat ve %M de dakika bilgisi için kullanılmıştır. Yedeklerin en eski tarihliden en güncel olanına doğru sıralı olabilmesi için özellikle yıl, ay, gün, saat ve dakika sırasını kullanmakta yarar var.

Üçüncü satır da yine ikinci satırdaki gibi bir başka veritabanının yedeklenmesi için kullanılmıştır. Yedeğini alacağınız kaç tane veritabanı varsa her biri için tek tek ikinci satırdaki komuttan oluşturun.

En son satırda ise, belirli tarihten eski dosyaların silinmesi için bir komut var. Sürekli yedek aldığımızda bir süre sonra klasörümüz yedek dosyaları ile dolacaktır. Betik örneğinde (-mtime +6) 7 günden önce oluşturulmuş dosyaların silinmesi komutu verilmiştir. “-mtime” ile birlikte kullandığımız sayının, gün sayısının bir eksiği olduğuna dikkat etmişsinizdir. Yedeklerinizi 30 güne kadar saklayıp daha eski tarihli olanları silmek istiyorsanız “-mtime +29” şeklinde kullanmanız gerekmektedir.

Şimdi gelelim GoDaddy tarafına.

backup.sh betik dosyasındaki komutları Ctrl + A ile seçin ve Ctrl + C ile kopyalayın.

“_db_backups” klasörünün içindeyken “New” butonuna tıklayın ve yeni bir dosya açın. Bu dosyanın içine tıklayıp Ctrl + V ile yapıştırın. Dosyayı kaydedin. İsim olarak “backup.sh” gibi bir isim verin. Ne isim verdiğiniz önemli değil ama İngilizce olmasında yarar var. Gün olur GoDaddy’deki teknik ekip ile irtibat kurmanız gerekir. O nedenle dosyanın adının backup.sh olmasında yarar var.

Şimdi bu dosyanın izinlerini (permission) değiştirerek çalıştırılabilir olmasını sağlayalım. Bunun için backup.sh dosyasını seçin ve üstte Permissions butonuna tıklayın.

“Web Visible” ve “Executable” seçeneklerinin her ikisini de seçili olsun ve OK’e tıklayın. Artık betik dosyamız çalıştırılabilir hale geldi.

Dosya isminin en sağında, göz simgesinin yanında > işaretinin bulunması, işlemi doğru yaptığımızın göstergesidir.

Eksik olan ne var? Betiğin hangi zamanlarda çalıştırılacağını belirlemeliyiz, öyle değil mi? Yani yedekleme işlemi günlük mü yapılsın, her saat mi yapılsın, haftada bir veya ayda bir mi yapılsın?

Yedeklemenin günlük yapılmasında yarar var. Bir de gün içerisinde saat kaçta yapılacağı önemli. Web sayfanızın mümkün olduğunca en düşük trafiğe sahip olduğu, sabaha karşı 4-5 gibi saatler idealdir. Böylelikle web sayfanızın veritabanı en az kullanılıyorken yedeği alınmış olur ve olası sorunların önüne geçilmiş olur.

Yedekleme için en ideal saatin hangisi olduğunu, web sayfanızın uzun vadeli trafik raporlarını analiz ederek bulabilirsiniz.

GoDaddy Cron Job Manager’a ulaşabilmek için Control Panel’den “Cron Job Manager” butonuna tıklayın:

Karşınıza gelen ekranda;

  1. “Create Cron Job” butonuna tıklayın (Görsel 9).
  2. “Browse” butonuna tıklayarak çalıştırılacak kabuk betiği dosyasını (backup.sh) seçin (Görsel 9).
  3. Yeni bir pencere açılacak. Burada önce “_db_backups” klasörü seçin (Görsel 10).
  4. Daha sonra da “backup.sh” dosyasını seçin (Görsel 10).
  5. “Select” butonuna basın (Görsel 10).
  6. “Cron job title” bölümüne bir isim verin. Örnek: Yedek (Görsel 9).
  7. “Frequency” bölümünden kabuk betiğinin hangi sıklıkta çalıştırılacağını belirleyin. Örnek: Daily (günlük) (Görsel 9).
  8. “Hour” bölümünden kabuk betiğinin günün hangi saatinde çalıştırılacağını belirleyin. Örnek: 19: xx (Türkiye saati ile GoDaddy’nin ABD’deki server saati arasında yazın 10, kışın 9 saat fark olduğunu unutmayın)  (Görsel 9).
  9. “Save” butonuna basarak kaydedin  (Görsel 9).

Görsel 9

Görsel 10

Yaptığınız değişiklikler kaydedilecek ve aşağıdaki gibi bir ekran çıkacak karşınıza. Görselden de anlaşılacağı üzere, Yedek isimli bir cron job oluşturulmuş ve her gün saat 19:05’te (biz 19:xxolarak seçmiştik, GoDaddy bize kendisi için uygun olan dakikayı otomatik verir), “$HOME/html/_db_backups/backup.html” betiği çalıştırılacaktır.

Bundan sonra ilgili veritabanlarınızın, belirlemiş olduğunuz zamanlarda düzenli bir şekilde yedeği alınacak ve belli bir tarihten eski olan dosyalar otomatik olarak silinecek.

Bundan sonra yedek almak için strese girmeye gerek yok. Her şey kendiliğinden olup biterken siz kahvenizi keyifle yudumlayabilirsiniz.

Hakkında Özgür Turanlı

Mühendis, ek$i sözlük yazarı, DMOZ editörü, SEO bilir (ama "uzman" değil), Android, iOS ve GNU/Linux kullanıcısı. Mobil ve internet teknolojilerine ilgi duyuyor.

Cevap yazın

Yukarı Çık
test başarılı: 62.0.653.99