Tworzenie i przywracanie strony podczas jej budowania - skrypt bash

#!/bin/bash
 
# Skrypt do tworzenia i przywracania kopii witryn podczas ich budowania.
# Skrypt ma za zadanie wykonanie kopii zapasowej strony w danym momencie.
# Jeśli dalsza budowa strony nie powiedzie się, możesz przywrócić działającą kopię strony.
#
# Obsługa ↓
# Wykonaj kopię: ./kz.sh zapis
# Wykonaj kopię dla dużych stron - zwiększa operacje na dysku - zmiejsza transfer ./kz.sh zapis+
# Przywróć z kopii stronę: ./kz.sh odzyskaj
# Zobacz komendę do manualnego zapisania kopii: ./kz.sh zrzut
# Zobacz komendę do manualnej kopii: ./kz.sh odczytaj
 
# zmiennne
ssh_haslo=''
ssh_port=""
ssh_nazwa_host=""
ssh_sciezka=""
mysql_host=""
mysql_juzek=""
mysql_baza=""
mysql_haslo=''
 
 
# stałe
mysql_plik="kopia_zapasowa_$(date +%s)$(date +%s | base64).sql"
data="$(date +%F)"
strona="strona"
 
# dobór: hasła i portu SSH ; hosta MySQL
if [ -z $ssh_haslo ]
then
    ssh_haslo="brak_hasła"
fi
 
if [ -z $ssh_port ]
then
    ssh_port="22"
fi
 
if [ -z $mysql_host ]
then
    mysql_host="localhost"
fi
 
# operacja
czynnosc=$1
 
# co wykonać?
case $czynnosc in
    "zapis"|"z"|"Z") # wykonaj kopię
        # utworzenie katalogu
        i=0
        while [ -d "${strona}_${data}_$i" ]; do
            ((i++))
        done
        ostatni="${strona}_${data}_$i"
        mkdir $ostatni
 
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
 
        echo "Zrzut bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "cd $ssh_sciezka && mysqldump --no-tablespaces -h$mysql_host -u$mysql_juzek -p$mysql_haslo $mysql_baza > $mysql_plik"
 
        echo "Kopia →"
        sshpass -p $ssh_haslo rsync -azz -e "ssh -p $ssh_port" $ssh_nazwa_host:$ssh_sciezka/ $ostatni
 
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
 
        baza=$ostatni/kopia_zapasowa_*.sql
 
        if [ -s $baza ]
        then
            echo "|" $ostatni "|" "OK"
        fi 
    ;;
    "zapis+"|"z+"|"Z+") # wykonaj kopię dla dużych stron
        poprzedni="$(ls -v | tail -1)"
 
        # utworzenie katalogu
        i=0
        while [ -d "${strona}_${data}_$i" ]; do
            ((i++))
        done
        ostatni="${strona}_${data}_$i"
        mkdir $ostatni
 
        echo "Kopiowanie plików z poprzednie katalogu"
 
        rsync -azz $poprzedni/ $ostatni
 
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
 
        echo "Zrzut bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "cd $sssh_sciezka && mysqldump --no-tablespaces -h$mysql_host -u$mysql_juzek -p$mysql_haslo $mysql_baza > $mysql_plik"
 
        echo "Kopia →"
        sshpass -p $ssh_haslo rsync -azz --delete -e "ssh -p $ssh_port" $ssh_nazwa_host:$ssh_sciezka/ $ostatni
 
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
 
        baza=$ostatni/kopia_zapasowa_*.sql
 
        if [ -s $baza ]
        then
            echo "|" $ostatni "|" "OK"
        fi 
    ;;
    "odzyskaj"|"o"|"O") # przywróć kopię
        read -p "Potwierdz (t): " -n 1 -r
        if [[ $REPLY =~ ^[t]$ ]]
        then
        echo ""
 
        ostatni="$(ls -v | tail -1)"
 
        echo "Kopia ←" $ostatni
        sshpass -p $ssh_haslo rsync -azz --delete $ostatni/ -e "ssh -p $ssh_port" $ssh_nazwa_host:$ssh_sciezka/
 
        echo "Odzykanie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "cd $ssh_sciezka && mysql -h$mysql_host -u$mysql_juzek -p$mysql_haslo $mysql_baza < kopia_zapasowa_*.sql"
 
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
        fi
    ;;
    "zrzut"|"zz"|"ZZ") # wyświetl komendę wykonywania kopii
        echo "Manualna komenda →"
        echo "sshpass -p '$ssh_haslo' ssh -p $ssh_port $ssh_nazwa_host 'rm -f $ssh_sciezka/kopia_zapasowa_*.sql' ; sshpass -p '$ssh_haslo' ssh -p $ssh_port $ssh_nazwa_host 'cd $ssh_sciezka && mysqldump --no-tablespaces -h$mysql_host -u$mysql_juzek -p'$mysql_haslo' $mysql_baza > kopia_zapasowa_\$(date +%s)\$(date +%s | base64).sql' && sshpass -p '$ssh_haslo' rsync -azz --delete -e 'ssh -p $ssh_port' $ssh_nazwa_host:$ssh_sciezka/ . ; sshpass -p '$ssh_haslo' ssh -p $ssh_port $ssh_nazwa_host 'rm -f $ssh_sciezka/kopia_zapasowa_*.sql'"
    ;;
    "odczytaj"|"oo"|"OO") # wyświetl komendę przywracania kopii
        echo "Manualna komenda ←"
        echo "sshpass -p '$ssh_haslo' rsync -azz --delete . -e 'ssh -p $ssh_port' $ssh_nazwa_host:$ssh_sciezka/ && sshpass -p '$ssh_haslo' ssh -p $ssh_port $ssh_nazwa_host 'cd $ssh_sciezka && mysql -h$mysql_host -u$mysql_juzek -p'$mysql_haslo' $mysql_baza < kopia_zapasowa_*.sql' ; sshpass -p '$ssh_haslo' ssh -p $ssh_port $ssh_nazwa_host 'rm -f $ssh_sciezka/kopia_zapasowa_*.sql'"
esac
Zastosowanie: 

Skrypt do tworzenia i przywracania kopii witryn podczas ich budowania

Wiedza: 
Praktyczna
Kategoria: