Tworzenie i przywracanie strony podczas jej budowania - skrypt bash

[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)"

# 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 "${data}_$i" ]; do
((i++))
done
ostatni="${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 --info=progress2 -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+"|"x"|"X") # wykonaj kopię dla dużych stron
poprzedni="$(ls -vd */ | tail -1)"

# utworzenie katalogu
i=0
while [ -d "${data}_$i" ]; do
((i++))
done
ostatni="${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 $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 --info=progress2 --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 -vd */ | tail -1)"

echo "Kopia ←" $ostatni
sshpass -p $ssh_haslo rsync -azz --info=progress2 --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 --info=progress2 -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 --info=progress2 . -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
[/bash]

Zastosowanie: 

Skrypt do tworzenia i przywracania kopii witryn podczas ich budowania

Wiedza: 
Praktyczna
Kategoria: