Sunucunuzda nginx server üzerinde birden çok çalışan rails uygulamamız var. Belirli aralıklarla veritabanı yedeği almak istiyoruz. Bu işleri yapan birçok hazır tool vs. mevcut.
Benim istediğim tam olarak /etc/nginx/sites-enabled/ dizininde rails uygulamalarına ait yapılandırma dosyaları bulunan uygulamaların production sql yedeğini almak.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/bash today=`date +%Y-%m-%d_%H-%M` # Bugünün tarihin for i in /etc/nginx/sites-enabled/* # /etc/nginx/sites-enabled diznindeki tüm dosyalar üzerinde dönüyoruz do if [ $i != "/etc/nginx/sites-enabled/default" ] # default haricindeki dosyalar için işlem yapacağız then path=`cat $i | grep -w root | awk '{print $2}' | sed 's/\public;//g'` # yapılandırma dosyasında root ile başlayan satırda rails uygulamasının bulunduğu dizin tanımlı. sed ile "public;" siliyoruz path=$path"config/database.yml" # İlgili rails uygulaması için veritabanı bilgilerinin bulunduğu dosya if [ -e $path ] # Eğer database.yml varsa then username=`cat $path | grep -w username | awk '{print $2}'` # grep ile username: olan satırı awk ile veritabanı kullancı adını aldık password=`cat $path | grep -w password | awk '{print $2}'` # grep ile password: olan satırı awk ile veritabanı parolasını aldık dbname=`cat $path | awk '$0 == "production:" {i=1;next}; i && $1 == "database:"' | awk '{print $2}'` # production için veritabanı ismini aldık dump=`mysqldump $dbname -u$username -p$password` # mysqldump ile sql çıktısı ürettik filename="/home/emre/mysql_backups/"$today"_"$dbname # sql yedeklenecek dosya adını belirledik `echo $dump > $filename.sql` # sql çıktısını yazdırdık fi fi done |
backup.sh dosyasını oluşturup /etc/cron.weekly/ dizinine taşıdık. chmod ile executable yaptıktan sonra terminalden ./backup.sh diyerek çalıştırdığımızda /home/emre/mysql_backups/ dizininde sql yedeklerimizi görebiliriz.
Bir cevap yazın