Linux sunucular için yedekleme scripti

Eğer SSH erişiminiz olan bir Linux sunucunuz varsa, yazdığım bu script günün birinde hayatınızı kurtarabilir. Özellikleri şunlar:

  • Sistemde bulunan tüm veritabanlarını yedekler (MySQL).
  • Aynı sunucuda yedek almak çok anlamlı olmadığından, script ayrıca bir FTP sunucusuna da yükleme yapmaktadır (FTP alanı için para vermenize gerek yok, şu adresten 1 GB büyüklüğünde bir alanı ücretsiz alabilirsiniz: http://www.drivehq.com/ftp/ )
  • Her ne kadar güvenli olduğunu söyleseler de FTP ile tüm verilerinizi ellere gönderirken, güvenlik en önemli şey. O yüzden script verileri şifrelemektedir (PGP).
  • Şifrelendikten sonra az yer kaplaması için sıkıştırmaktadır, böylece trafiği de hafifletmektedir (ZIP).
  • Haftanın her günü için bir dosya şeklinde yedek almaktadır. Böylece yedeklerin üstüne yazmamaktadır (1 hafta süre ile geriye dönebilirsiniz).
  • log klasöründe günlük yedekleme raporu tutar.
  • Yedekleme raporunu, çalıştırılan tüm işlemlerin sonuçlarıyla birlikte e-posta adresinize gönderir.
  • İnci dizer, bade süzer :P

Scripti kurmak için şu adımları izleyin:

  1. Aşağıdaki scripti kopyalayıp bir editörle açın ve ##YAZI## şeklindeki her yere kendi ayarlarınızı koyun (ara-değiştir’i kullanın, açıklamaları altta).
  2. Scripti backup.sh adıyla sunucunuza yükleyin ve “chmod +x backup.sh” komutuyla işletim yetkisi verin.
  3. Scripti kopyaladığınız klasöre /var/www diyelim. SSH ile giriş yaptıktan sonra “crontab -e” komutuyla yeni bir satır açarak şunu yapıştırın: “00 04 * * * /var/www/backup.ssh &> /dev/null
    (Bunun anlamı şu: Her gece saat 04:00 da bu scripti çalıştır)
  4. Denemek için bir kere çalıştırın (./backup.sh)

Yerlerine konacak değerler (ara-değiştir ile yapın):

##KLASOR## Yedeklerinizin oluşacağı klasör. Yazma yetkisi verin. Örnek: /var/www

##KULLANICI## Root / mysql kullanıcı adı

##SIFRE## Root / mysql şifreniz

##KOD## PGP için kullanılacak bir kod, açarken de lazım olacak unutmayın. Açmak için “gpg -d sifrelidosyaadi -o acilmisdosyaadi” şeklinde kullanın. Kodu size soracaktır.

##FTPSUNUCU## Ftp sunucunuz (ftp.drivehq.com gibi)

##FTPKULLANICI## Ftp kullanıcı adınız

##FTPSIFRE## Ftp şifreniz

##EPOSTA## Raporun gönderileceği e-posta adresiniz

Script (backup.sh):

# Yedekleme scripti, Bahadir Colak 2010, serbestce kopyalanabilir.

cd ##KLASOR##

mkdir log &> /dev/null

echo =============== DB YEDEKLEME BASLADI ============== > log/`date +’%F’`.log
echo `date` >> log/`date +’%F’`.log
echo ================================================ >> log/`date +’%F’`.log
echo ” ” >> log/`date +’%F’`.log

rm ##KLASOR##/alldbs.sql &> /dev/null

echo ———- SQL aliniyor———- >> log/`date +’%F’`.log
/usr/bin/mysqldump -f -x -v –log-error=log/`date +’%F’`.log –user=##KULLANICI## –password=##SIFRE## –all-databases > ##KLASOR##/alldbs.sql
echo ———- SQL Alindi ———- >> log/`date +’%F’`.log
echo ” ” >> log/`date +’%F’`.log

echo ———- Sifreleniyor———- >> log/`date +’%F’`.log
gpg -c –passphrase ##KOD## -o ##KLASOR##/alldbs-`date +’%u’`.gpg ##KLASOR##/alldbs.sql >> log/`date +’%F’`.log
echo ———- Sifreleme tamam ———- >> log/`date +’%F’`.log
echo ” ” >> log/`date +’%F’`.log

rm ##KLASOR##/alldbs-`date +’%u’`.zip &> /dev/null

echo ———- Sikistiriliyor———- >> log/`date +’%F’`.log
/usr/bin/zip -9 ##KLASOR##/alldbs-`date +’%u’`.zip##KLASOR##/alldbs-`date +’%u’`.gpg >> log/`date +’%F’`.log
echo ———- Sikistirma tamam ———- >> log/`date +’%F’`.log
echo ” ” >> log/`date +’%F’`.log

rm ##KLASOR##/alldbs-`date +’%u’`.gpg &> /dev/null

echo ———- Yukleniyor———- >> log/`date +’%F’`.log

/usr/bin/ftp -nv >> log/`date +’%F’`.log <<EOF
open ##FTPSUNUCU##
user ##FTPKULLANICI## ##FTPSIFRE##
cd /backup
prompt
bin
mput alldbs-`date +’%u’`.zip
quit
EOF

echo ———- Yukleme tamam ———- >> log/`date +’%F’`.log
echo ” ” >> log/`date +’%F’`.log

rm ##KLASOR##/alldbs-`date +’%u’`.zip &> /dev/null

echo =============== DB YEDEKLEMESI BITTI ============== >> log/`date +’%F’`.log
echo `date`>> log/`date +’%F’`.log
echo ============================================== >> log/`date +’%F’`.log

echo ———-Rapor yollaniyor ———-

mail -s”Yedekleme raporu” “##EPOSTA##” <log/`date +’%F’`.log

Dipnot: Ben bu scriptten günde 2 kere çalıştırıyorum. Bunun için cron dosyasına bir ekleme yapmanız yeterli.

Dipnot 2: Fedora kullandığımdan zip, gpg, ftp vs. çalıştırırken /usr/bin klasörünü kullandım. Eğer sizde başka yerdelerse onları da değiştirin. Yerini whereis ya da which komutuyla öğrenebilirsiniz (örneğin “which ftp” gibi).

Dipnot 3: Allah muhtaç etmesin ama günün birinde verilerinizi kaybederseniz, o zaman scriptin değerini anlarsınız (tecrübe konuşuyor).

Dipnot 4: Joinvps’den sunucu almayın!

1 Yorum

Kapadokya FatihAğustos 20th, 2010 11:20

İnanın Hasenat 4′ten son derece faydalanıyorum. Çalışmalarınızdan dolayı Allah ecrinizi arttırsın.

Yorum Yapın

Mesajınız