Günlük yedek almak için bir betik yazdım. Dosyalar rsync ile internet üstündeki bir sunucuda tutuluyor. Betiği kullanmak için önce parola kullanmadan sunucuya bağlanmak için birkaç şey yapıyoruz:
(http://www.linuxproblem.org/art_9.html adresinden kopya çektik bunun için)
Kendi bilgisayarımızda
ssh-keygen -t rsa
komutunu veriyoruz. Bu bize bir dosya üretiyor.
ssh kullanici@sunucu mkdir -p .ssh
ile sunucuda .ssh dizini oluşturuyoruz.
cat .ssh/id_rsa.pub | ssh kullanici@sunucu 'cat >> .ssh/authorized_keys'
komutu ile az önce oluşturduğumuz dosyayı sunucuda oluşturduğumuz dizine gönderiyoruz.
ssh kullanici@sunucu komut
komutunu verdiğimizde sunucuya bağlanacak, komut komutunu sunucuda çalıştıracak ve çıkış yapacak.
Artık sunucuya parola kullanmadan bağlanabiliyoruz. Aşağıdaki bash betiğini ben /usr/bin/Yedekle.sh diye kaydedip çalıştırma izni verdim. Yedekle.sh komutuyla belirlediğim dizinleri sunucuda belirlediğim yerlere kopyalıyor. rsync’nin güzelliği, yalnızca değişen dosyaları sunucuya göndermesi. Yani her gün birkaç saat beklemiyorsunuz yedek alabilmek için.
Aradaki echolar neden var? Bunu aşağıda yazacağım. Baştaki apache2 stop komutunun sebebi Apache’nin hafıza tüketme konusunda über bir yeteneğinin olması. rsyncye hatalar verdirebiliyor, sunucudaki hafıza da düşük olduğu için Apache’yi yedekleme esnasında kapatıyorum. Ama bu işlemi sabah 4te yaptığım için en az kayıpla (siteye yalnızca 150 kişi giriyor o saatte) atlatıyoruz bu kapanma sürecini.
Betiğimizi yazdık, gereken yere kopyaladık, gereken izinleri verdik.
Şimdi bunu crontab -e komutuyla cron job olarak ekliyoruz.
5 6 * * * Yedekle.sh >> /var/log/Yedek.log
Her gün 06:05’te Yedekle.sh’ı çalıştırıp çıktısını /var/log/Yedek.log a gönderiyoruz.
İşte echoların sebebi de buydu. Yedek.log dosyasını okuyup anlayabilmek için oraya güzel güzel yazıyoruz ne iş yaptığımızı.
Aynı işlemi yarım saat sonra da başka bir makina için yapıp iki yerde yedeklerimizi tutuyoruz ve haftalık olarak da bunları CD/DVD’ye yazıyoruz. Elinizdeki verileri tekrar tekrar kaybetmeden bu kadar yedekçi olmayabilirsiniz. Ama olmanızı öneririm.
Sanırım hepsi bu kadar.
Yedekle.sh:
#!/bin/bash
echo ""
echo "==================================================="
date
#echo ""
#echo "Apache stop"
#ssh tugrul.org /etc/init.d/apache2 stop
echo ""
echo "rsync -av /tpanel root@tugrul.org:/root/Yedek"
rsync -av /tpanel root@tugrul.org:/root/Yedek
echo ""
echo "rsync -av /Data/www root@tugrul.org:/root/Yedek"
rsync -av /Data/www root@tugrul.org:/root/Yedek
echo ""
echo "rsync -av /Data/Yazilar root@tugrul.org:/root/Yedek"
rsync -av /Data/Yazilar root@tugrul.org:/root/Yedek
echo ""
echo "mysqldump --all-databases -p |gzip > /Data/MysqlYedek.20081230.sql.gz && rsync -av /Data/MysqlYedek.20081230.sql.gz root@tugrul.org:/root/Yedek"
mysqldump --all-databases -pMYSQL_ROOT_PAROLASI |gzip > /Data/MysqlYedek.`date +'%Y%m%d'`.sql.gz && rsync -av /Data/MysqlYedek.`date +'%Y%m%d'`.sql.gz root@tugrul.org:/root/Yedek
#echo ""
#echo "Apache start"
#ssh tugrul.org /etc/init.d/apache2 start
xxx.sh: line 3: /xxx/xxx/yedek/2009/07/13-13:11.sql.gz: No such file or directory
mysqldump: Got errno 32 on write
Bu hatayı alıyorum,neden kaynaklanıyor olabilir,yardımlarınızı bekliyorum.
1. Dizin yerinde olmayabilir. /xxx/xxx/yedek/2009/07 dizinini yaratıyor musunuz?
2. “:” sorun çıkarıyor olabilir.