[ anon70939 @ 06.08.2015. 12:37 ] @
Pozdrav svima, evo mene i u ovoj sferi...
Imam usko znanje, ali zelju i mogucnosti da se upoznam malo vise.

Situacija je sledeca, postoje dva zakupljena dedicated servera na Hetzneru. PX90 i EX40. Prijatelj koji ima firmu je zakupio te servere i eto mene planira da uposli malo oko toga da mu pomognem.

EX40 trenutno nicemu ne sluzi, osim da ja malo cackam i ucim na njemu, pa kad "zavrsim" sa tim onda bismo trebali da trazimo reinstal. U principu oni ga vise ne upotrebljavaju za hostovanje jer im je cesto "zakucavao". U jednom momentu kad je tako zakucao, uspeo sam da se zakacim na njega i pokrenem htop i video sam da je swap particija od 8GB puna, ostalo samo 160Kb prostora, a isto tako i 99% memorije od 16GB je bilo napunjeno... A server ničemu ne služi, nema ni jedan live sajt

Treba da smislimo strategiju backUP-a i naravno da realizujemo. Trenutno on ne radi nikakav backup.

Koliko vidim, na "live" serveru odnosno PX90 vrti par nekih sajtova, od kojih su dva Shop-a uradjena u nekom Magentu.

On je do sada sve sto bi radio menjao u nekom test okruzenju na istom serveru, pa tek onda to stavljao na live sajt.
Backup nije nikakav radio, i do sada je sve na srecu bilo kako treba.

Moja neka ideja za sada je ova sa slike. Da li pogresno razmisljam? To je neki koncept koji sam sada zamislio, kasnije cu da trazim resenje kako to da unapredim.
Mislio sam da taj EX40 iskoristimo kao backup storage i cisto eto za neka testiranja.
Videh da postoji neka rsync funkcija i svidela mi se. Da li sa tom rsync funkcijom mogu i bazu da sinhronizujem? Ili se to samo radi klasicnim svakodnevnom dampovanjem baze?

Sa ove fotke, da li razmisljam na pogresan nacin?
Usmerite me :)


[Ovu poruku je menjao CoyoteKG dana 06.08.2015. u 13:49 GMT+1]
[ anon70939 @ 06.08.2015. 23:10 ] @
Je l' imate preporuku za neki kvalitetan i aktivan srpski Linux forum :)
Gde mogu da postavljam i ovakva pitanja?

moze na pp
[ ŽIKI @ 07.08.2015. 00:29 ] @
Backup baze radiš sa dump. Preporučujem da je onda zapakuješ(tar), zatim enkriptuješ(gpg) i tek onda prebaciš na dugi server(rsync).
To koliko često ćeš da radiš backup zavisi od potreba, a pošto kažeš da nikad nije rađen...
Zavisi i koliko su veliki sajtovi, koliko imaš mesta na disku za backup-e da čuvaš, koliko su ti važni podaci koje možeš da izgubiš...

A prva vežba na backup serveru nek ti bude vraćanje sajta iz backup-a Tako znaš da ako se i desi nešto, da možeš brzo da povratiš sajtove.
[ mulaz @ 07.08.2015. 00:44 ] @
bas takav backup radi program rsnapshot, koji koristi rsync + nesto logike/pameti sa hard linkovima ( http://rsnapshot.org/ )

ima cak i podrsku, da pre pocetka backupa pokrene skriptu (recimo da napravi mysqldump)
[ Panta_ @ 07.08.2015. 08:32 ] @
Imas na netu gomilu uputstava, skripti, aplikacija za backup, evo jdnog https://www.digitalocean.com/c...ur-site-with-rsync-on-centos-6. Jednostavno, kreiraj ssh kljuc i otpremi ga na server sa kog vrsis backup, zatim u crontab unesi vreme i komandu ili putanju do skripte kojom vrsis backup,na primer:
Code:
ssh-keygen -t rsa -f ~/.ssh/rsync
ssh-copy-id -i .ssh/rsync.pub [email protected]
creontab -e
0 5 * * *  /home/$USER/backup.sh > /home/$USER/backup.log 2>&1

Ovo sa slike si lepo zamislio i jos samo da to pretocis u neki backup skript. Za arhiviranje pogledaj tar komandu, a za datoteke starije od 3 meseca find komandu, na primer:
Code:
find /home/$USER/backupdir -mtime +90 -exec rm {} \;
[ anon70939 @ 07.08.2015. 19:34 ] @
E drago mi je da sam video neki post ovde :).

Dakle, iako nemam nekog iskustva, ovo što sam zamislio se kreće u dobrom pravcu?
To sa find sam već negde video. Odnosno imamo problem sa nekim session folderom i logovima koji se pakuju unutra.
Kako sam ukapirao, svaka poseta, svako ko poseti sajt taj "Magento" cuva logove u tom folderu. Rekao mi da se jednom desilo da se skupio ceo terabajt O.o. Sada trenutno ima oko 15GB.
Kaze da mu je frka to sada da obrise, jer je prosli put "ubio" server kad ih je brisao (taj terabajt).

Brisao je sa ovom komandom
Code:
find session/ -name ‘sess_*’ | xargs rm


Izguglao sam da je za ovaj problem bolje uraditi rsync sa nekim praznim folderom, nesto poput ovog
Code:
# rsync -a --delete empty_dir/    yourdirectory/


a po nekim testovima je valjda još brža komanda bila
Code:
# time perl -e 'for(<*>){((stat)[9]<(unlink))}'


na ovom serveru sa kojim mogu da se igram ću da isprobam obe, mada mi se više sviđa ova rsync komanda.

Kad ispraznim te problematicne foldere, onda bas planiram Panto to sto si pomenuo.
Nasao sam ovu komandu
Code:
 # find /test -mtime +7 -exec rm {} \;

koja briše fajlove koji su modifikovani zadnji put pre 7 dana. Ili bih stavio neki duži period, pa da to ubacim u skriptu sa back-upom koju planiram da okidam svaku noć ili jutro. Ne znam samo da li mu treba vise od 7 dana da cuva te logove, cemu mu uopste sluze. Ne verujem da je imao nekad potrebu da ih gleda.


Citat:
ŽIKI:
Backup baze radiš sa dump. Preporučujem da je onda zapakuješ(tar), zatim enkriptuješ(gpg) i tek onda prebaciš na dugi server(rsync).
To koliko često ćeš da radiš backup zavisi od potreba, a pošto kažeš da nikad nije rađen... :)
Zavisi i koliko su veliki sajtovi, koliko imaš mesta na disku za backup-e da čuvaš, koliko su ti važni podaci koje možeš da izgubiš...

A prva vežba na backup serveru nek ti bude vraćanje sajta iz backup-a :D Tako znaš da ako se i desi nešto, da možeš brzo da povratiš sajtove.

"Dampovao" sam danas neku bazu sa ovog servera sa kojim se igram, ali sam to rucno odradio preko Plesk-a. Siguran sam da postoji i neka skripta, mislim da sam je izguglao negde.
S obzirom da ima neki shop sajt sa oko 3000 artikala, velikom bazom podataka, ne znam koliko bi tu trajalo taj dump ako bih ga radio svaki dan. Da li bih sa tim ubijao server? U pitanju je px90, vidim da ima 64GB DDR4 memorije i neki odlican procesor. Taj sajt je prilicno ozbiljan, i donosi ozbiljnu lovu mesecno, pa mislim da bih morao da se potrudim da radim backup jednom dnevno. Jbg, ipak ne može to baš na sreću kao do sada... U principu, prostor je 2x2 terabajta. Mislim da je itekako dovoljno da imam po kopiju sajta jednom u zadnja 3 meseca, po jednom nedeljno u zadnjih 28 dana, i zadnja nedelja svakodnevno. to je recimo 13 kopija. Hosting je zakupljen zbog tog sajta, ali ima prostora pa je prišlepano još par desetina manje bitnih sajtova koji nemaju ni približnu posećenost.

I dobra ideja za prvu vezbu!
Pitanje jedno naivno :),
ako recimo sa resync imam dva ista foldera na dva razlicita servera, i live server mi iz nekog razloga padne, kakva je procedura za vracanje servera?
U glavi mi otprilike stoji, da domen nekako preusmerim samo na lokaciju gde mi je backup server? Pretpostavljam da preko te neke firme gde sam zakupio domen, mogu samo da redirektujem domen na taj server? Doduse, to cu u ponedeljak pitati ovog lika, kako to ide :). Pretpostavljam da ako postoji mogucnost da se redirektuje sajt, da je bolje to uraditi pa naci i resiti problem na live serveru, nego kopirati brzo nazad podatke na taj server...
[ Burgos @ 07.08.2015. 19:51 ] @
Ovo su samo neki laički saveti:

Citat:
S obzirom da ima neki shop sajt sa oko 3000 artikala, velikom bazom podataka, ne znam koliko bi tu trajalo taj dump ako bih ga radio svaki dan


3000 artikala implicira mnogo malu bazu podataka, tako da ne bi bekap mnogo trajao :-). Ako su ti diskovi u RAID-u, još kraće.

Dnevni bekap je OK, pa onda cron job-om možeš da brišeš starije bekape. Pored toga, verovatno ti treba standby baza podataka koja može da uskoči u slučaju da ova zakaže.
Bekape naravno, ne držiš na istom serveru gde je i baza :-).

Citat:

ako recimo sa resync imam dva ista foldera na dva razlicita servera, i live server mi iz nekog razloga padne, kakva je procedura za vracanje servera?


ako nemaš standby, podigneš bazu podataka, importuješ damp, podesiš okruženje (ako već nemaš podešeno) i podesiš DNS zapise (domen, što kažeš) da adrese pokazuju na novi server. Ovo ima dosta
mana, naravno, a to je npr. da vreme propagacije traje relativno (i često neprihvatljivo) dugo. Druga opcija je da imaš aplikaciju na jednom serveru, a bazu na drugom, replikovanu
na trećem, pa onda samo na serveru sa aplikacijom promeniš konekciju na drugu bazu.

Ili da imaš jedan haproxy koji redirektuje sav saobraćaj ka serveru, pa onda samo promeniš njegovu konfiguraciju.

Citat:

a po nekim testovima je valjda još brža komanda bila
Code:
# time perl -e 'for(<*>){((stat)[9]<(unlink))}'


u ovoj komandi samo treba da izbaciš time :-).
[ Panta_ @ 08.08.2015. 06:09 ] @
Citat:
Ne znam samo da li mu treba vise od 7 dana da cuva te logove, cemu mu uopste sluze. Ne verujem da je imao nekad potrebu da ih gleda.

To su sesije ulogovanih korisnika, kao kad se prijavis na ES forum, kreira se sesija sa tvojim informacijama, pa kada sledeci put posetis ES, ne trba ponovo da unosis login podatke. Ako ih izbrises, izbrisaces i sve podatke prijavljenih korisnika. Koliko ce dugo da cuva te podatke, zavisi o kakvom se sajtu radi, mada +7 dana mislim da je dovoljno. Za uklanjanje mozes da koristis pomenutu find komandu. Evo, ovde imas jos neka resenja http://stackoverflow.com/quest...-session-files-need-to-be-kept. Naravno, pre nego sto bilo sta uklonis, odradi backup.
[ Jbyn4e @ 08.08.2015. 08:05 ] @
Pominjao si plesk? On beše ima bug u nekoj verziji da mu ne radi ispravno brisanje sesija (daily cron script). Imao sam i ja taj slučaj, najlakše je bilo da se ubije apache, preimenuje ovaj folder, napravi novi pod istim nazivom i podese privilegije i ponovo pokrene apache. Nakon toga brisanje tog preimenovanovanog direktorijuma ume da potraje, jer mislim da beše ne može da se obriše sa rm -rf dir već ima neka procedura koju imam negde, ali ne sad...

I da, negde na plesk sajtu postoji rešenje kako se prepravi taj cron da radi kako treba brisanje sesija...
[ anon70939 @ 06.09.2015. 16:13 ] @
Sad sam krenuo prvo na kucnom racunaru da smisljam i da probam da napisem za pocetak neku skriptu i strukturu backup fodera.

Zamisljao sam do ovog momenta kako bih skriptu stavio na glavni server i namestio da okida svakodnevo, ali vidim svuda po netu da je praksa da je skripta u stvari na backup serveru, pa se kaci preko SSH na glavni server i onda krece sa rsync, dump-om baze i slicno...

Iz kog razloga je to tako bolje?
[ Jbyn4e @ 06.09.2015. 17:36 ] @
Verovatno da ne bi opteretila glavni server, jer rsync kad radi "malo jede memoriju i cpu"... pretpostavljam. Ali nemaš često mogućnost da na backup serveru radiš šta hoćeš...


[ anon70939 @ 06.09.2015. 22:58 ] @
Ovako, napisao sam nesto u ovom fazonu, samo sto sam za pocetak ovde na lokalnom racunaru testirao.
Kad budem napravio to do kraja, onda cu deo /home/ceman/Documents/ zameniti sa folderom koji je na glavnom odnosno remote serveru.

Code:

#!/bin/bash
# My first script

sleep 2
rsync -avzh /var/backups/day-6/ /var/backups/day-7/
sleep 2
rsync -avzh /var/backups/day-5/ /var/backups/day-6/
sleep 2
rsync -avzh /var/backups/day-4/ /var/backups/day-5/
sleep 2
rsync -avzh /var/backups/day-3/ /var/backups/day-4/
sleep 2
rsync -avzh /var/backups/day-2/ /var/backups/day-3/
sleep 2
rsync -avzh /var/backups/day-1/ /var/backups/day-2/
sleep 2
rsync -avzh /home/ceman/Documents/ /var/backups/day-1/
sleep 2

DAYOFWEEK=$(date +"%u")
if [ "$DAYOFWEEK" == 7 ] 
then
   rsync -avzh /var/backups/sunday-4/ /var/backups/sunday-5/
   sleep 2
   rsync -avzh /var/backups/sunday-3/ /var/backups/sunday-4/
   sleep 2
   rsync -avzh /var/backups/sunday-2/ /var/backups/sunday-3/
   sleep 2
   rsync -avzh /var/backups/sunday-1/ /var/backups/sunday-2/
   sleep 2
   rsync -avzh /var/backups/day-1/ /var/backups/sunday-1/
fi

sleep 2

DAYOFMONTH=$(date +"%d")
if [ "$DAYOFMONTH" == 01 ] 
then
   rsync -avzh /var/backups/month-5/ /var/backups/month-6/ 
   sleep 2  
   rsync -avzh /var/backups/month-4/ /var/backups/month-5/ 
   sleep 2
   rsync -avzh /var/backups/month-3/ /var/backups/month-4/ 
   sleep 2
   rsync -avzh /var/backups/month-2/ /var/backups/month-3/ 
   sleep 2
   rsync -avzh /var/backups/month-1/ /var/backups/month-2/ 
   sleep 2
   rsync -avzh /var/backups/day-1/ /var/backups/month-1/
fi


S tim, sto je ovo samo pocetak,
Posle ovoga planiram prvo skriptu koja ce da prvo uradi dump svih baza, pa onda rsync na remote serveru u neki backup folder na istom tom serveru, pa onda zip ili tar tog foldera pa tek onda kopiranje na backup server i onda ostatak ove skripte koju sam za sada napisao.

Posle ove skripte bih dodao samo da se neki izvestaj snimi u neki log fajl i taj log fajl posalje meni na mail. Probao bih da nadjem nacin da ukoliko je doslo do neke greske, da mi flaguje mail kao important i u subject-u napise ERROR ili nesto sto bi mi privuklo paznju, jer obicno kod ovakvih automatizovanih stvari, bar na proslom poslu gde sam pisao .bat skripte, danima ne bih primetio da nesto nije u redu, jer ne bih kontrolisao logove redovno. Valjda cu naci neku ideju :)

E da... jos bih posle svega mozda i raspakovao sve ove foldere, u isti /www/ folder na backup serveru, nasao neki nacin i da se baza "oddampuje" ili kako se vec kaze :), pa da uvek postoji rezervna varijanta, da ako se sa glavnim serverom nesto desi, da samo promenom DNS zapisa preusmerim na taj backup server kako bi sajtovi radili dok se ne resi problem sa glavnim serverom.


Je l' mi OK ova skripta, ili negde gresim? Mozda neka malo pismenija ideja? Nesto sto sam zaboravio?
[ Burgos @ 07.09.2015. 07:44 ] @
Citat:
Posle ove skripte bih dodao samo da se neki izvestaj snimi u neki log fajl i taj log fajl posalje meni na mail.


Samo ovo postavis u svoj crontab (crontab -e) i pobrines se da u /etc/aliases stoji tvoja adresa:



(ako si ovo menjao, trebalo bi da restartujes postfix: sudo service postfix restart).

Citat:
Probao bih da nadjem nacin da ukoliko je doslo do neke greske, da mi flaguje mail kao important i u subject-u napise ERROR ili nesto sto bi mi privuklo paznju, jer obicno kod ovakvih automatizovanih stvari, bar na proslom poslu gde sam pisao .bat skripte, danima ne bih primetio da nesto nije u redu, jer ne bih kontrolisao logove redovno. Valjda cu naci neku ideju :)


Code:
err_report() {
    echo "Error on line $1" | mail -s "ERROR" [email protected]
}

trap 'err_report $LINENO' ERR


Citat:
Je l' mi OK ova skripta, ili negde gresim? Mozda neka malo pismenija ideja? Nesto sto sam zaboravio?


Izgleda OK. Obavezno stavljaj sve putanje pod navodnike (umesto /var/backups/day-7/ stavi "/var/backups/day-7"). Ako nekad slucajno budes imao rm /var/log/hello, ovo ce spreciti probleme ako slucajno
stavis razmak i komanda ispadne rm /var/ log/hello.

Umesto svega ovoga, ja bih koristio logrotate. Skripta za logrotate bi bila nesto kao:

Code:

/var/backups/daily.tar {
    daily
    dateext
    rotate 7
    missingok
    copy
    compress
    postrotate
        rsync -avzh "/home/ceman/Documents/" "/var/backups/tmp/"
        tar cf "/var/backups/daily.tar" "/var/backups/tmp/"
    endscript
}


ili slicno (samo kucam nisam proveravao, ali pogledaj po internetu). Isto bih uradio i za monthly i za weekly, samo umesto daily stavis weekly odnostno monthly.

Ista stvar i za weekly i za monthly
[ anon70939 @ 07.09.2015. 08:45 ] @
Koliko sve ovo lakse izgleda nego dok sam u Windowsu pokusavao batch skripte da nateram da slicno nesto rade... :). Mozda je bilo lakse iz power shell-a, ali nisam pokusavao.
Da "nateram" batch da posalje mail nisam uspevao nikako, nego bih na kraju pozivao VB skriptu koja bi to uradila.
A tek o opciji rsync da ne govorim. Mozda postoji nesto slicno i za Win, ali sam koristio samo kopiranje i zipovanje.
Cini mi se da sam i mnogo vise koda morao da unesem da bih koristio datum na slican nacin kao ovde...

Za sada sam prilicno zadovoljan kako funkcionise .sh


Hvala za znake navoda, to cu ispraviti.
Sto se tice logrotate, kako mislis "umesto svega ovoga". Mislio si samo na slanje logove ili i kompletnu sinhronizaciju?
Ne kapiram najbolje sta bi radila ova tvoja postrotate skripta.
[ Burgos @ 07.09.2015. 09:11 ] @
Kompletnu sinhronizaciju. Ovako je nekakva ideja: logrotate se pokrene jednom i okrene fajlove - uradi renaming daily.tar -> daily.tar.1, daily.tar.1 -> daily.tar.2 (samo sa datumom u ekstenziji - zbog dateext). Nakon toga svega se pokrene postrotate skripta, i uradi rsync, i zatim zapakuje ceo `tmp/` u daily.tar arhivu. Tada imas

daily.tar - najsvezija arhiva
daily.tar.1 - jedna ranije
daily.tar.2 - dve ranije
daily.tar.2 - tri ranije itd (sve do sedam - zbog rotate 7 specifikacije u skripti).

Ista ideja je za weekly i monthly backupe.
[ Burgos @ 07.09.2015. 09:16 ] @
Inace, i da odlucis da ne koristis logrotate, opet bih ovu skriptu razbio na tri dela - jednu za daily, drugu za weekly, a trecu za monthly. Onda bih svaku skriptu pozivao iz cron joba, jednom dnevno, jednom nedeljno, odnosno jednom mesecno:


$ crontab -e
@daily perform_daily_backup.sh
@weekly perform_weekly_backup.sh
@monthly perform_monthly_backup.sh
[ anon70939 @ 07.09.2015. 09:37 ] @
U win sam imao problema da mi je task scheduler zapucavao povremeno iz meni nekih nepoznatih razloga.
I to sve dok smo imali desetak razlicitih taskova.
Kad smo objedinili sve to u jednu skriptu i u scheduler-u imali samo jedan task smanjili smo broj problema na minimum.

Tom logikom sam se i ovde vodio, da je mozda bolje sve spakovati u jednu skriptu koja bi proveravala datum ili dan, pa ako nije taj dan, onda da ide dalje...

Koja bi bila u stvari prednost kada bih razbio skriptu na 3 dela?
[ Burgos @ 07.09.2015. 09:58 ] @
Pa, prednost je sto mozes da koristis jednu skriptu, i onda samo kao argumente da joj prosledis deo koji je izmenjen (day/month/sunday). Velicina skripte pada tri puta, i svaki put kada nesto hoces da izmenis, mozes da izmenis na samo jednom mestu, a ne na tri mesta.

Tvoja primedba stoji, ali nisam imao problema sa cronom na Linuxu, a odrzavam desetine skripti u cronu na 100+ servera.

Naravno, sve ovo su samo ideje, sto kazu, da prosiris vidike, slobodan si da nista ne poslususas - Kao sto rekoh, tvoja skripta izgleda ok :-).
[ anon70939 @ 07.09.2015. 10:05 ] @
Ah, nisam stavio smajli u mojoj prethodnoj poruci pa mozda izgleda previse ozbiljan moj ton.
Postavljam pitanja cisto da vidim kako to u praksi izgleda :), i da li postoji neka prednost koje tvoje iskustvo kaze. :). I hvala ti sto imas strpljenja pa dangubis ovde sa mnom :)

Naravno da volim da vidim vise nacina pa cu na kraju odluciti za ono sto je najbolje, iliti ono sto znam da napravim ako se ne snadjem kao recimo sto mi za sada konfuzno izgleda postrotate, a verovatno je odlicna stvar...

Nego, sad pokusavam cisto testa radi prvo da sinhronizujem nesto sa remote servera na lokalnu masinu, i iskoristio sam ovo

rsync -avzh [email protected]:/home /var/backups/day-1/

Fora je sto u tom /home folderu imam samo jedan fajl, i mislio sam da ce taj jedan da pregazi sve ovo sto vec postoji u day-1 i nakon sinhronizacije da ce u njemu biti samo taj jedan fajl.

Kad sam izvrsio ovu komandu iz terminala, svi falovi vec postoje u day-1 s tim sto je dodat jos taj jedan novi.
To mi ne odgovara tako.
Jer sta ako na remote serveru budu namenski obrisani neki fajlovi iz nekog odredjenog foldera, i ja odradm rsync, na backup serveru ce i dalje da postoje ti fajlovi, a ja zelim da bude kopija identicna.
[ Burgos @ 07.09.2015. 10:33 ] @
Citat:
Ah, nisam stavio smajli u mojoj prethodnoj poruci pa mozda izgleda previse ozbiljan moj ton.
Postavljam pitanja cisto da vidim kako to u praksi izgleda :), i da li postoji neka prednost koje tvoje iskustvo kaze. :). I hvala ti sto imas strpljenja pa dangubis ovde sa mnom :)


Nema na cemu :-). Nije bio ozbiljan ton sa tvoje strane, nego sam ja rekao, jer ni sa moje strane nema ozbiljnog tona :-).

Sto se tice tvog pitanja, samo prosledi jednu od --delete u rsync:

--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from dest dirs



rsync -avzh --delete-after [email protected]:/home /var/backups/day-1/
[ anon70939 @ 07.10.2015. 22:59 ] @
da pitam na ovom mestu, zbog toga sto se pominjao rsync


U folderu web_app imam gomilu fajlova i direktorijuma, i između ostalog direktorijum .svn.
Kako da rsync-ujem sve osim tog .svn direktorijuma iz web_app u neki drugi

Pokusao sam sve ove nacine i svaki put dovucem i .svn folder sa svim fajlovima unutar njega.

rsync -avze --exclude '.svn/' /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/


rsync -avze --exclude ".svn/" /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/


rsync -avze --exclude=".svn/" /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/
[ Panta_ @ 08.10.2015. 07:49 ] @
Gde se nalazi taj .svn dir, u root web_app ("/var/www/vhosts/pic.events/svn/web_app/.svn")? Probaj sa -R (--relative) opcijom:
Code:
rsync -avze -R --exclude '.svn' /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/

Ili sa --cvs-exclude:
Code:
rsync -avze -c --exclude '.svn' /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/


Citat:
-C, --cvs-exclude

This is a useful shorthand for excluding a broad range of files
that you often don’t want to transfer between systems. It uses a
similar algorithm to CVS to determine if a file should be
ignored.

The exclude list is initialized to exclude the following items
(these initial items are marked as perishable -- see the FILTER
RULES section):

RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS
.make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
*.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe
*.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/


then, files listed in a $HOME/.cvsignore are added to the list
and any files listed in the CVSIGNORE environment variable (all
cvsignore names are delimited by whitespace).

Finally, any file is ignored if it is in the same directory as a
.cvsignore file and matches one of the patterns listed therein.
Unlike rsync’s filter/exclude files, these patterns are split on
whitespace. See the cvs(1) manual for more information.

If you’re combining -C with your own --filter rules, you should
note that these CVS excludes are appended at the end of your own
rules, regardless of where the -C was placed on the com‐
mand-line. This makes them a lower priority than any rules you
specified explicitly. If you want to control where these CVS
excludes get inserted into your filter rules, you should omit
the -C as a command-line option and use a combination of --fil‐
ter=:C and --filter=-C (either on your command-line or by
putting the ":C" and "-C" rules into a filter file with your
other rules). The first option turns on the per-directory scan‐
ning for the .cvsignore file. The second option does a one-time
import of the CVS excludes mentioned above.
[ tuxserbia @ 08.10.2015. 07:51 ] @
Koje verzije, rsync, linux, radiš u lokalu ili remote?

-e povlači podrazumevano ssh, mada možeš da promeniš.

Ovo radi bez problema, namerno sam napravio pet-šest poddirektorijuma, zaobilazi ih normalno, nevezano za dubinu.

rsync -avz --exclude "*.old" --exclude "*.jpg" --exclude ".svn/" SOURCE/ DEST/

Možda bi ti bilo bolje da proučiš malo i .cvsignore, pa uz "-C" možeš lepo da skratiš kobaje od komandi.
[ anon70939 @ 08.10.2015. 08:00 ] @
jeste bilo u lokalu ovaj put, a -e sam ostavio od proslog puta :/
zakacio sam se sa ssh ali sam kopirao sa jednog mesta na drugo na istom serveru.

Panto, da u root web_app

sad cu da probam i jedno i drugo


edit:
to je to
-R mi je pomoglo

hvala

iskoristio sam ovu pantinu
rsync -avze -R --exclude '.svn' /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/


e sad... kada sam dodao --delete

rsync -avze -R --delete --exclude '.svn' /var/www/vhosts/pic.events/svn/web_app/ /var/www/vhosts/pic.events/pum.pic.events/


nije mi uspelo.

Odnosno, dest folder, pum.pic.events/ je imao prethodno neke fajlove u sebi, sa ovom gore komandom su se sinhronizovali svi fajlovi, ali su i ostali neki fajlovi nepotrebno kojih je bilo u dest folderu, ali ih nije bilo u source folderu.


Dakle, hocu da mi bude 100% identican dest folder, source folderu, s tim sto zelim da excludujem .svn/ folder

[Ovu poruku je menjao CoyoteKG dana 08.10.2015. u 09:10 GMT+1]
[ Panta_ @ 08.10.2015. 08:42 ] @
Koju gresku prikaze? Mozda nema dozvole da ih ukloni. Pogledaj izlaz komande.
[ anon70939 @ 08.10.2015. 09:23 ] @
Sada mi je OK. O_o
Radi mi komanda.
Sad sam još zbunjeniji :)
[ tuxserbia @ 08.10.2015. 10:05 ] @
rsync je toliko moćan, da prosto nije humano. Ali zato je i "malo" komplikovan za razumeti.

Jesi pročitao man stranu?

imaš brdo opcija pod "delete", ovo tvoje briše samo već sinhronizovane direktorijume.

Moj savet ti je da, u lokalu, ili kroz ssh svejedno, kao običan korisnik, napraviš SOURCE i DEST direktorijume, napuni prvi glupostima i vežbaj. Proveri sve opcije i filtriranje. Brat bratu tri sata odvojiš, i posle ima ti nas da savetuješ.
[ Panta_ @ 09.10.2015. 15:03 ] @
Citat:
#!/bin/bash
# My first script

sleep 2
rsync -avzh /var/backups/day-6/ /var/backups/day-7/
sleep 2
rsync -avzh /var/backups/day-5/ /var/backups/day-6/
sleep 2
rsync -avzh /var/backups/day-4/ /var/backups/day-5/
sleep 2
rsync -avzh /var/backups/day-3/ /var/backups/day-4/
sleep 2
rsync -avzh /var/backups/day-2/ /var/backups/day-3/
sleep 2
rsync -avzh /var/backups/day-1/ /var/backups/day-2/
sleep 2
rsync -avzh /home/ceman/Documents/ /var/backups/day-1/
sleep 2

DAYOFWEEK=$(date +"%u")
if [ "$DAYOFWEEK" == 7 ]
then
rsync -avzh /var/backups/sunday-4/ /var/backups/sunday-5/
sleep 2
rsync -avzh /var/backups/sunday-3/ /var/backups/sunday-4/
sleep 2
rsync -avzh /var/backups/sunday-2/ /var/backups/sunday-3/
sleep 2
rsync -avzh /var/backups/sunday-1/ /var/backups/sunday-2/
sleep 2
rsync -avzh /var/backups/day-1/ /var/backups/sunday-1/
fi

sleep 2

DAYOFMONTH=$(date +"%d")
if [ "$DAYOFMONTH" == 01 ]
then
rsync -avzh /var/backups/month-5/ /var/backups/month-6/
sleep 2
rsync -avzh /var/backups/month-4/ /var/backups/month-5/
sleep 2
rsync -avzh /var/backups/month-3/ /var/backups/month-4/
sleep 2
rsync -avzh /var/backups/month-2/ /var/backups/month-3/
sleep 2
rsync -avzh /var/backups/month-1/ /var/backups/month-2/
sleep 2
rsync -avzh /var/backups/day-1/ /var/backups/month-1/
fi

S tim, sto je ovo samo pocetak,
Posle ovoga planiram prvo skriptu koja ce da prvo uradi dump svih baza, pa onda rsync na remote serveru u neki backup folder na istom tom serveru


Ne znam dokle si stigao sa skriptom, ali mogao bi ovu rsync komandu da stavis u neku funkciju, pa posle sa istom da pozoves rsync ili sta vec, na primer:
Code:
backup () {
    rsync komanda 2> error.log
    if [ $? -ne 0 ]; then
        cat error.log | mail -s "Error" $(whoami)
fi

Takodje, ovo DAYOFWEEK=$(date +"%u") mozes da zamenis sa if [ $(date +%u) -eq 7 ], isto i DAYOFMONTH, pa pozoves backup funkciju. Ove daily, weekly i monthly direktorijume mozes da definises nekom promenljivom, npr: dest=(daily weekly monthly) i posle ih prosledis funkciji kao parametar.

Pogledaj i: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
[ anon70939 @ 10.10.2015. 10:29 ] @
Nisam je završio još :/
Na poslu letim sa jedne na drugu stvar i ništa detaljno ne završim.
Ali pogledaću čim se vratim na to
[ anon70939 @ 29.12.2016. 16:54 ] @
Godinu i po dana kasnije.
Tada nekada sam napravio tu neku skriptu ali više nije bilo potrebe za takvim backupom.
Morao sam sve vreme ručno jer su nam sajtovi bili kod drugih hosting kompanija, i samo FTP pristup. To sam već pitao u nekoj drugoj temi, i rešio. Spremam skriptu i za to :)

E sad, Iskrslo je da moram da bekapujem svakodnevno, na sličan način kao što sam u ovoj temi u prvom postu pitao. Zato bih se nadovezao na ovu temu.
Destination server je u pitanju Windows. Pošto je u pitanju 5GB fajlova, gde svakodnevno izmena ima po samo par desetina MB, suludo mi je da kopiram svaki put po svih 5GB za svaki dan posebno. Pogotovo što su serveri na različitim udaljenim lokacijama.

Htedoh da vidim kako funkcioniše incremental rsync, i naišao sam na neko jako matoro uputstvo koje se podudara sa ovim što sam u prvom postu nacrtao, i evo sad ponovo, više da bih skapirao vizuelno šte se dešava.


mv day3/ day4/
mv day2/ day3/
mv day1/ day2/
cp -al backup_directory/ day1/
rsync -a --delete source_directory/ backup_directory/

1. Ako sam dobro razumeo -al komanda će mi napraviti hard linkove. Hard linkovi valjda ne zauzimaju nikakav prostor, ali u nekom momentu ako ih samo iskopiram na drugi server (recimo zbog restore) u tom momentu će to postati pravi fajlovi, odnosno duplikati?
2. Interesuje me kod mv, i dalje su to hard linkovi kad ih pomerim? cp valjda ne, kao sto pitah u prethodnom pitanju
3. Na ovom primeru gde sam iscrtao razliku u fajlovima, pošto taj fajl koji je različit, ne postoji na drugom mestu (prepisan je originalni), on više nije hard link, nego realan pravi fajl? Što znači da će recimo ceo folder "Day4" da mi bude u stvari težak u MB koliko je težak daj neki fajl koji u stvari više nije hard link?.
4. Ako bih u stvari hteo da olakšam "restore", odnosno da nemam gomilu foldera sa fajlovima, nego da spakujem sve u jedan zip, šta bi se desilo kad bih baš taj Day4 sa tim hard linkovima zipovao?


preedit:
U trenutku pisanja posta vidim da postoji i neka rsync komanda --link-dest= ali je još nisam skapirao.
[ maksvel @ 29.12.2016. 20:26 ] @
Nisam se baš mnogo udubljivao, pa ću samo da pojasnim oko hard-linkova.
Hard link predstavlja "ulaz" u fajl. Kada napraviš hard-link, kreira se još jedan taj "ulaz", koji ukazuje na isti sadržaj, u stvari postaje ravnopravan kao "original", koji je u stvari isto jedan hard-link.
Ako obrišeš jedan hard-link, samo se smanjuje broj linkova u evidenciji u tabeli i-nodova. Ako obrišeš sve hard-linkove, briše se fajl.
Ako kopiraš fajl preko bilo kog linka, kopira se i sadržaj, da.
[ anon70939 @ 29.12.2016. 21:42 ] @
Ako kopiram fajl sa "cp", ili hard link, zatim izmenim sadrzaj, original ostaje netaknut?
Ako "mv" fajl odnosno hard link, i izmenim ga, izmeniće se i original?
Ako zipujem hard linkove, pa ih posle raspakujem na drugom mestu, oni vise nemaju nikakve veze sa originalima?

Koja razlika je izmedju cp -l i ln?
[ maksvel @ 30.12.2016. 10:42 ] @
Kad kopiraš koristeći hard link, kopira se sve na šta se on odnosi - ako koristiš normalan cp. Ako ideš sa cp -l, onda pravi samo link, na isti sadržaj.
cp -l i ln daju isti rezultat.

Znači, hard-linkovi su u stvari fajlovi kada radiš sa njima, nebitno je da li kopiraš koristeći "original" ili hard-link, svakako sve "komplet" se kopira i imaš nezavisnu kopiju.

Sve ovo možeš lagano da proveriš
[ anon70939 @ 30.12.2016. 12:00 ] @
Dakle moguce je koristiti hard linkove kao incremental backup.

OK, sad sam samo zapucao oko toga sto se ovi hard linkovi odnose na fajl.

Kako cu sad odraditi ako taj jedan folder na source racunaru ima hiljade podfoldera i desetine hiljada fajlova...

Doduše komanda

cp -al backup_directory/ day1/

Bi trebalo rekurzivno da iskopira linkove svih fajlova iz foldera backup_directory/ u day/


U svakom slucaju, sad sam skinuo Kali linux, potreban mi je za jos kojesta, pa cu da instaliram VM i da probam sve varijante :).

hvala
[ anon70939 @ 30.12.2016. 15:46 ] @
Probao, radi
Ajd da napišem i ovde šta uradih, možda za 10 godina mi bude zanimljivo da pogledam :P

Ovo mi je struktura foldera.
root@kali:/var/backup# ls -l
total 3688
-rw-r--r-- 1 root root 3696889 Dec 30 10:16 backup.log
drwxrwx--- 16 544 197121 4096 Dec 24 17:52 bckp
drwxrwx--- 16 544 197121 4096 Dec 24 17:52 day1
drwxr-xr-x 2 root root 4096 Dec 30 10:36 day2
drwxr-xr-x 2 root root 4096 Dec 30 10:36 day3
drwxr-xr-x 2 root root 4096 Dec 30 10:37 day4
drwxr-xr-x 2 root root 4096 Dec 30 10:37 day5
drwxr-xr-x 2 root root 4096 Dec 30 07:49 day6
drwxr-xr-x 2 root root 4096 Dec 30 07:49 day7
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month1
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month2
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month3
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month4
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month5
drwxr-xr-x 2 root root 4096 Dec 30 07:49 month6
drwxr-xr-x 2 root root 4096 Dec 30 07:49 week1
drwxr-xr-x 2 root root 4096 Dec 30 07:49 week2
drwxr-xr-x 2 root root 4096 Dec 30 07:49 week3
drwxr-xr-x 2 root root 4096 Dec 30 07:49 week4


Prvo sam uradio rsync sa remote win servera
rsync -avhP -e ssh --log-file="/var/backup/backup.log" [email protected]:"/cygdrive/f/TMP/Documents/Uploaded/" "/var/backup/bckp/"


A zatim
root@kali:/var/backup# cp -al bckp/. day1/


Tako da kad izmerim velicinu oba foldera, i sa "original" fajlovima, i sa hard linkovima, oba su prilicno velika.
A kada izmerim njihov parent folder, nije sabran, nego nesto vrlo malo veci.

root@kali:/var/backup# du -hs .
6.3G .
root@kali:/var/backup# du -hs bckp/
6.2G bckp/
root@kali:/var/backup# du -hs day1/
6.2G day1/


Još samo da spakujem to u skriptu
[ anon70939 @ 27.04.2017. 17:04 ] @
Evo mene opet :)

Dakle imam skriptu za backup svih baza sa remote servera.
Nesto poput ovog.
Zbog ovako "vidljive" sifre kreirao sam neki cs-backup user koji ima permisije samo
SHOW DATABASES, SELECT, LOCK TABLES, RELOAD, SHOW VIEW

Code:
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/var/backup/WebSRV/script-backup/$TIMESTAMP"
MYSQL_USER="cs-backup"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="SCaZK218YvGz+#zG"
MYSQL_HOST="websrv.site.com"
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p "$BACKUP_DIR/mysql"

databases=`$MYSQL --host=$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|psa|apsc|sys|horde|mysql|phpmyadmin_A7QQU1Y1MfJs|roundcubemail)"`

for db in $databases; do
  $MYSQLDUMP --force --opt --host=$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done


Pored toga imam za fajlove skriptu poput ovog
Code:

BACKUP_DIR="/var/backup/today"

mkdir -p "$BACKUP_DIR/files"

#site1.com webspace
rsync -ahR --no-o --no-g --delete -e ssh [email protected]:"/var/www/vhosts/./site1.com/httpdocs" "$BACKUP_DIR/files"
rsync -ahR --no-o --no-g --delete -e ssh [email protected]:"/var/www/vhosts/./site1.com/sub.site1.com" "$BACKUP_DIR/files"

#site2.com webspace
rsync -ahR --no-o --no-g --delete -e ssh [email protected]:"/var/www/vhosts/./site2.com/httpdocs" "$BACKUP_DIR/files"
rsync -ahR --no-o --no-g --delete -e ssh [email protected]:"/var/www/vhosts/./site2.com/sub.site2.com" "$BACKUP_DIR/files"



E sad, plan je da svakodnevno baze i fajlove pakujem u neki /var/backup/today/ folder
A odatle sa
Code:
cp -al /var/backup/today/ /var/backup/(date +"%F")/


Na ovaj nacin samo promenjeni fajlovi u odnosu na juce ce biti "teski", sve ostalo ce biti hard linkovi. To ce valjda biti nesto poput increment backup-a

Ako negde gresim u razmisljanju, ubacite sta da ispravim :)

Zbog cega pisem ovaj post, zbog pitanja sta je u stvari praksa?
Necu imati za sada neki automatizovani restore. Ovo je ipak tu kao za svaki slucaj, ukoliko dodje do nekog kurslusa da rucno vratim. Nemam puno sajtova.
Ali posto dovlacim sve sa nekog drugog servera, WP i magento sajtove. Koji mozda u nekom momentu mogu imati i viruse, bila mi je prvo ideja da fajl owner bude root. A u stvari ja bi trebalo i da promenim permisije u recimo 400?
Ili uopste da ne razmisljam o tome?