Cykliczny backup serwera
Cykliczny backup serwera
Witajcie,
wprawdzie znalazlem kilka tematow nt. robienia kopii zapasowych, jednakze nie odpowiedzialy one w 100% na moje pytania.
Otoz mam sobie serwer, na ktorym jest apache, mysql, postfix. Poszukuje jakis program, ktory by automatycznie robil raz w tygodniu backupy calego twardego dysku, tzn. ze jak padnie mi np. twardy dysk to "jedynie" bede musial tym programem przegrac na dany dysk kopie zapasowa i wszystko bedzie po staremu (cos ala Norton Ghost dla Windowsa).
Pliki chcialbym aby byly zapisywane na innym komputerze w lokalnej sieci.
Gdyby dany program po dokonaniu kopii wylaczal/restetowal komputer to dopiero bylbym zadowolony :-)
Z gory dziekuje Wam za pomoc
wprawdzie znalazlem kilka tematow nt. robienia kopii zapasowych, jednakze nie odpowiedzialy one w 100% na moje pytania.
Otoz mam sobie serwer, na ktorym jest apache, mysql, postfix. Poszukuje jakis program, ktory by automatycznie robil raz w tygodniu backupy calego twardego dysku, tzn. ze jak padnie mi np. twardy dysk to "jedynie" bede musial tym programem przegrac na dany dysk kopie zapasowa i wszystko bedzie po staremu (cos ala Norton Ghost dla Windowsa).
Pliki chcialbym aby byly zapisywane na innym komputerze w lokalnej sieci.
Gdyby dany program po dokonaniu kopii wylaczal/restetowal komputer to dopiero bylbym zadowolony :-)
Z gory dziekuje Wam za pomoc
Kamcio, możesz pierw zapisać backup na lokalnym kompie
a potem skryptem poniższym przenieść plik:
Ale na tym komputerze 192.168.0.20 musisz mieć ssh zainstalowane.
a potem skryptem poniższym przenieść plik:
Kod: Zaznacz cały
#!/bin/bash
scp ~/plik.backupu user@192.168.0.20:/backup/
rm ~/plik.backupu
Mało eleganckie, ale nie mam czasu poprawić. Działa, bo robię tym kopie zapasowe baz danych i wysyłam na oddzielny serwer backupa:
I backupConfig(nazwy plikow do podmieniania ):
Mam nadzieję że się przyda, do robienia kopii oddzielnych katalogów analogicznie.
Kod: Zaznacz cały
# Tworzenie kopii zapasowej baz:
# Aktualna data
month=`date +%m`
day=`date +%d`
year=`date +%y`
user="nazwaUsera"
lokalnyFTP="/var/www/web3/html/logi"
echo -e "Kopiuje bazy, prosze czekac...\n"
`cp -R /var/lib/mysql ./`
echo -e "Pakuje bazy, prosze czekac...\n"
`tar -c mysql > mysql.tar`
echo -e "Kompresuje bazy, prosze czekac...\n"
`gzip -cv mysql.tar > mysql.$day.$month.$year.tar.gz`
# Nazwa aktualnej bazy
aktualnaKopia="mysql.$day.$month.$year.tar.gz"
# Ustawianie praw dostepu( odkomentowac jesli konieczne i ustawic odpowiedniego uzytkownika w zmiennej user )
# echo -e "Ustawiam prawa dostepu\n"
# `chown $user:$user $aktualnaKopia`
# Przenoszenie kopii na lokalny serwer ftp( odkomentowac jesli konieczne, lub zmienic mv na cp jesli ma byc wykonane kopiowanie na lokalny ftp )
#echo -e "Przenosze kopie na lokalny serwer ftp...\n"
#`mv $aktualnaKopia $lokalnyFTP/`
#`cp $aktualnaKopia $lokalnyFTP/`
# To na koncu jest i nie uzywac tych opcji!!!
#echo "Usuwam niepotrzebne pliki..."
#`rm -fr mysql mysql.tar`
# odczyt z pliku
exec 6<backupConfig
i=0
# No ta linijke zostawiam zeby straszyc swoje dzieci, k***** jak mozna przypisac do zmiennej wartosc ktora jeszcze nie jest nawet zdefiniowana... ?
# doUsuniecia=${tab[0]}
# Troche duzo tych petli, ale to w nastepnej wersji poprawie...
while read -u 6 dane
do
tab[$i]=$dane
i=$((i+1))
done
i=-1
doUsuniecia=${tab[0]}
for x in ${tab[@]}
do
i=$((i+1))
temp[$i]=$x
done
i=$((i+1))
temp[$i]=$aktualnaKopia
exec 6<&-
# zamiana i zapis
exec 6>backupConfig
i=-1
j=0
for x in ${tab[@]}
do
i=$((i+1))
j=$((j+1))
tab[$i]=${temp[$j]}
done
i=-1
for x in ${tab[@]}
do
echo "$x" >> backupConfig
echo "$x "
done
exec 6<&-
# Po wykonaniu operacji plikowych mozna zabrac sie za usuwanie i uploadowanie tego co trzeba
# na zdalny serwer ftp. Co nas interesuje jest juz w zmiennych $aktualnaKopia oraz $doUsuniecia
# Najpierw usuwamy najstarszy plik, nastepnie uploadujemy najnowsza kopie. to na dole to debug
# echo -e "$doUsuniecia <- ten plik ma usunac \n"
{
echo -e "USER user\nPASS haslo\nCWD katalogKopii\nDELE $doUsuniecia\n"
echo "QUIT"
} | nc serwerBackupHost 21
# Uploadowanie odpowiedniego pliku
echo -e "Lacze sie z ftp...\n";
`ncftpput -u user -p haslo serwerBackup(host) /bazy $aktualnaKopia`
# Na koniec usuwanie niepotrzebnych plikow( mysql, mysql.tar, mysql.tar.gz, ta najstarsza kopia )
echo -e "Sprzatam po sobie...\n"
`rm -fr mysql mysql.tar $doUsuniecia`
Kod: Zaznacz cały
mysql.29.09.07.tar.gz
mysql.30.09.07.tar.gz
mysql.01.10.07.tar.gz