Wiele osób ma problem z napisaniem prostego skryptu do backupów pobieraj?cego aktualn? dat? i godzin?. Jako ?e w systemach Windows 2000 dzia?a?o to troszk? inaczej ni? w Windows XP podajemy gotowe rozwi?zanie na taki skrypt wykorzystuj?cy zewn?trzny paker RAR i tworz?cy log w postaci pliku .txt z ca?ej operacji:
i ma?e wyt?umaczenie, w folderze gdzie umieszczony mamy skrypt, musimy mie? te? Rar.exe wyci?gni?ty z instalacji np WinRar.
Skrypt utworzy nam 2 pliki. Pierwszy to archiwum RAR w folderze backup o nazwie pliku „backup_RRRR-MM-DD_GG-MM.rar”, a drugi to log w folderze log, o nazwie „log_RRRR-MM-DD_GG-MM.txt”
Kiedy?, dawno, dawno temu, obieca?em sobie i Wam - wiernym czytelnikom tego bloga (razem b?dzie jakie? 3 osoby), ?e b?d? prowadzi? "pami?tnik znaleziony w logu" czyli opisywa? moje boje z linuxem a konkretniej z serwerem dedykowanym pod hosting moich stron www.
Dzi? wróc? do tej tematyki opisuj?c jak na systemie debian w wersji 5 (o ile pami?tam to jest lenny) zbudowa?em prosty backup plików i baz danych.
System jest banalnie prosty, ?eby nie powiedzie? prostacki, ale lepszego na razie nie potrafi? zrobi?, jak si? naucz? - opowiem.
Zaczynamy od utworzenia w konsoli katalogów potrzebnych do trzymania kopii zapasowych i pliku gdzie b?dzie siedzia? sam skrypt, wydajemy komendy:
mkdir /root/skrypty
mkdir /root/backupysqltmp
nano /root/skrypty/backup
powinno pojawi? si? okno edytora nano, gdzie wklejamy:
echo "backup start"
# najpierw wyczyscimy conieco tabel w mysql, zawierajacych niepotrzebne dane, np. cache
# NaszeHasloMySql - tu musimy podac nasze haslo do konta z dostepem do tabel jakie mamy wyczyscic
mysql -u root -pNaszeHasloMySql < /root/skrypty/sqltrunccache
echo "trunc end"
# zrzucamy zawartosc 3 baz sql do lokalizacji /root/backupysqltmp
# pliki beda mialy nazwe z elementem zmiennym (aktualna data w formie timestamp)
# pliki beda spakowane za pomoca gzip
echo "basoofka sql start"
mysqldump -l --opt -u root -pNaszeHasloMySql baza1 | gzip -cq9 > /root/backupysqltmp/baza1_`date +%s`.sql.gz
echo "blogowisko sql start"
mysqldump -l --opt -u root -pNaszeHasloMySql baza2 | gzip -cq9 > /root/backupysqltmp/baza2_`date +%s`.sql.gz
echo "elimu sql start"
mysqldump -l --opt -u root -pNaszeHasloMySql baza 3| gzip -cq9 > /root/backupysqltmp/baza3_`date +%s`.sql.gz
# nastepnie z pomoca rsync wrzucamy pliki na zdalny serwer
# oczywiscie mozemy wrzucic wiecej katalogów
# na zdalnym serwerze powinny istnie? katalogi do których kopiujemy dane
echo "rsync publichtml start"
rsync -az /home/UserWWW/public_html/
Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć.
:backupy/public_html/
echo "rsync sql start"
rsync -az /root/backupysqltmp/
Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć.
:backupy/sql/
echo "koniec"
aby zapisa? plik i wyj?? z nano stosujemy kombinacj? CTRL+X i [enter]
nast?pnie zak?adamy plik gdzie b?dzie lista komend dla mysql
nano /root/skrypty/sqltrunccache
pojawi si? okno edytora nano, gdzie wklejamy (w moim przypadku)
use baza1;
TRUNCATE `cache_filter`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
use baza2;
TRUNCATE `cache_filter`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
exit
wychodzimy z nano ( CTRL+X i [enter] ) i czynimy dalsze przygotowania. Instalujemy rsync
apt-get install rsync
a nast?pnie najwa?niejsza cz??? - generujemy klucze publiczne i prywatne, ja korzysta?em z kilku poradników ( http://www.bqbackup.com/... , http://www.debian-admini... , http://www.gentoo.org/do... ), utkn??em w pewnym momencie ale jako? si? w ko?cu uda?o, zestaw komend do osi?gni?cia stanu, który pozwoli wrzuci? nasz skrypt do crontaba to mniej wi?cej:
ssh-keygen -t dsa
(na wszystkie pytania odpowiadamy enter, wygeneruje si? nam para kluczy w katalogu .ssh)
scp ~/.ssh/id_dsa.pub
Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć.
:
(wa?ny jest ten dwukropek na ko?cu, skopiujemy w ten sposób klucz publiczny na zdalnego hosta do katalogu domowego u?ytkownika "userzdalnegohosta")
potem logujemy si? na zdalnego hosta i:
cat id_dsa.pub >> ~/.ssh/authorized_keys
potem ju? z lokalnego hosta próbujemy si? zalogowa? po ssh na zdalny:
ssh
Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć.
je?li si? uda bez podawania has?a to jeste?my w domu, mo?emy doda? zadanie do crontab:
crontab -e
odpali si? nano z naszym crontabem, gdzie dodajemy linijk?:
0 20 * * * . /root/skrypty/backup
zamykamy nano ( ctrl + x, enter) zapisuj?c zmiany w crontab'ie
powy?sza linijka odpali codziennie o 20:00 (czasu serwera) nasz skrypt, mo?emy go najpierw przetestowa? odpalaj?c poszczególne jego cz??ci (linie) w wierszu polece? i sprawdzaj?c czy robi co ma robi?.
Jeszcze ma?y update - po kilku dniach dzia?ania skryptu mo?e si? okaza?, ?e nasz dysk jest zapchany plikami ze zrzutami sql. Jest na to rada - zapu?ci? w cronie usuwanie plików starszych ni? n dni, dodaj?c tak? oto linijk? (przyk?adow?)
0 04 * * * find /root/backupysqltmp/ -mtime +3 -exec rm {} \;
powy?szy zapis w cron oznacza - codziennie o 4 rano usu? pliki starsze ni? 3 dni z katalogu /root/backupysqltmp/. Mo?emy najpierw potestowa? komend? find w wierszu polece?, pisz?c np.
find /root/backupysqltmp/ -mtime +3
co powinno wy?wietli? nam pliki starsze ni? 3 dni. dodanie do komendy ci?gu ` -exec rm {} \;` spowoduje dodatkowo usuni?cie znalezionych plików. Opis komendy znalaz?em na http://www.howtogeek.com...
uff, teraz ?pi? nieco spokojniej :)