Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 8
  • Sigurnosno kopiranje pomoću skripti. Primjer MySQL sigurnosne skripte

Sigurnosno kopiranje pomoću skripti. Primjer MySQL sigurnosne skripte

Predgovor

Ideja o izradi skripte koja može napraviti sigurnosnu kopiju stranice u nekoliko klikova (sve datoteke + dump baze podataka) pojavila se u vrijeme kada sam radio na nekoliko projekata, razvijao i testirao na lokalni web poslužitelj. Već tada sam imao Denver koji se s vremenom promijenio u sve brže razvijajući lokalni kombinat web servisa - OpenServer.

Projekti su posjećivani, pa je najprije napravljena lokalna kopija cijele stranice, a nakon toga se s njom moglo raditi i eksperimentirati, izbjegavajući prekide u radu živog projekta. Napravio sam sigurnosnu kopiju ovako: ulogirao sam se putem SSH-a i zapakirao mapu projekta s 7Zip ili TGZ arhiverom, napravio dump koristeći mysqldump i preuzeo sve te stvari putem weba ili SCP / WinSCP.

Lijenost se odmah osjetila i pojavila se ideja o automatizaciji: "bilo bi cool da se sve što unesem u konzolu radi automatski za svaku stranicu, a od mene je potrebno samo nekoliko klikova." Prva potraga za rješenjem za automatizaciju SSH pod Windowsima odmah me dovela do uslužnog programa koji već dugo koristim za rad s datotekama na poslužiteljima - .

Kako radi rezervna skripta

Dakle, bit skripte automatizirane sigurnosne kopije je sljedeća:

  1. Čitamo podatke iz ini-datoteke, gdje spremamo postavke za stranicu (ime, prijavu, lozinku, mysql račun ...);
  2. Na temelju podataka generiramo skriptu za WinSCP koja će obaviti sve potrebne operacije u konzoli na poslužitelju;
  3. Pokrećemo program WinSCP koji se prijavljuje na server i pravi sigurnosnu kopiju stranice + baze podataka, te također arhivira sve podatke koristeći arhiver visoke kompresije - 7Zip ili TAR + GZip;
  4. Preuzimanje arhive;
  5. Zatvori WinSCP i očisti zapise + izbriši privremeno generiranu skriptu za WinSCP s naredbama;
  6. Spreman! Trebate kopiju druge stranice? - IDITE NA 1!

Može postojati više od jednog mjesta, ali nekoliko, tako da je omogućeno korištenje mnogih ini-datoteka s zasebnim postavkama za svako mjesto.

Sve operacije za obradu i upravljanje WinSCP-om izvodit će skripta. napisano u bat-datotekama skriptnog jezika pod Windowsima. Uz to je implementirano i jednostavno sučelje konzole koje vam omogućuje izvođenje svih potrebnih operacija.

Za ovaj zadatak, po svojoj jednostavnosti, sasvim je dovoljan skriptni jezik bat-datoteka, no ipak se nitko ne miješa u implementaciju ovog sustava u Autoit ili u neki od programskih jezika. visoka razina, kao što su C#, Delphi itd.

Pažnja! Skripta je relevantna samo ako imate pristup konzoli poslužitelja putem SSH-a.

Sigurnosno sučelje i izbornik

Nakon pokretanja skripte dostupan nam je jednostavan izbornik:

Prva stavka (pritisnite 1 i enter) odgovorna je za proces izrade sigurnosne kopije i prikazuje popis dostupnih konfiguracijskih datoteka predložaka za stranice.

Druga točka je generiranje predloška konfiguracijske datoteke i njegovo otvaranje za uređivanje.

Treći odlomak je kratka referenca za pisanje datoteka predložaka.

Na donjoj slici otvara se izbornik s izborom mjesta dostupnih za rezervaciju:

Ovdje je podstavka "0. Sve stranice navedene u nastavku" odgovorne za pokretanje sigurnosne kopije svih stranica sa sljedećim konfiguracijskim datotekama. Tako možete napraviti sigurnosnu kopiju za jedno mjesto ili za sve odjednom.

Primjer konfiguracijske datoteke za skriptu

Ovdje je primjer konfiguracijske datoteke somesite.com.ini za sigurnosno kopiranje somesite.com:

Sitename_string=somesite_com store_path=D:\Backup\ archive_method=7z [e-mail zaštićen] hostname=000.111.222.333 ssh_user=root [e-mail zaštićen] mysql_user=site1_user mysql_password=PZBkOyjMmxWgQHhd185g mysql_db_name=site1_db dirs_to_backup=/var/www/somesite.com/www/* /var/www/somesite.com/www/.htaccess

Kao što vidite, sve je jednostavno i ništa više. Reći ću vam detaljno o svakom retku postavki:

sitename_string - dodijelite jasno ime web stranice (samo latinica i simbol _).

store_path - put do lokalno računalo gdje će se arhiva sigurnosne kopije učitati.

archive_method - Metoda za arhiviranje datoteka stranice.

  • 7z - koristit će se istoimeni arhivar, izlaz će biti arhiva s ekstenzijom "zip".
  • gz - arhiviranje s TAR+GZip, izlaz će biti arhiva s nastavkom "tgz".

archive_password - lozinka za arhivu, radi samo kada je archive_method=7z .

hostname - vanjska IP adresa ili domena poslužitelja koji ugošćuje stranicu i bazu podataka.

ssh_user - korisničko ime za spajanje putem SSH-a. U većini slučajeva potreban vam je root za izvođenje svih operacija, iako ga možete pokušati postaviti za drugog neprivilegiranog korisnika.

ssh_lozinka!! - lozinka za gore navedenog korisnika.

mysql_user * - korisničko ime za spajanje na bazu podataka stranice na MySQL poslužitelju.

mysql_password je lozinka za gore navedenog MySQL korisnika. Mora se instalirati sigurno!

mysql_db_name - naziv baze podataka stranice za koju ćemo napraviti puni dump.

dirs_to_backup ** - napišite razmakom odvojen popis punih staza, direktorija i datoteka za arhiviranje.

Bilješke:

Ako ostavite vrijednost praznu, lozinka će biti zatražena kasnije u interaktivnom načinu rada (preporučam da ne pohranjujete lozinku).

* Pretpostavlja se da su skripte i baza podataka MySQL podaci hostiran na istom poslužitelju. To jest, adresa MySQL poslužitelja je 127.0.0.1 (localhost).

** Prema zadanim postavkama, arhivari ne pakiraju .htaccess datoteke, pa morate dodatno navesti puni put do njih!

** Obavezno označite puni, ne relativni putevi u mape ili datoteke.

Možete kreirati konfiguracijske datoteke koliko god želite, kada pokrenete skriptu, ime svake će biti prikazano sa dodijeljenim brojem, za početak morate unijeti broj (broj) konfiguracije i to je to (ako niste naveli lozinku, a zatim unesite drugu lozinku).

Priprema za rad i korištenje skripte

Sve je vrlo jednostavno!

Prvi korak je odlučiti gdje ćemo pohraniti skriptu sa svim njezinim konfiguracijama. Preporučujem da takve programe i podatke ne pohranjujete na lokalni stroj u otvorena forma, jer nije sigurno, pogotovo ako su lozinke za root pristup poslužiteljima pohranjene u konfiguracijama. Kompleks se može pohraniti negdje na šifriranom mediju ili gdje virusi ili stranci. Što se tiče sigurnosti – izbor je vaš, idemo dalje.

Neka cijeli kompleks bude smješten duž staze:

  • D:\Backup\ - ovdje će se učitavati arhive sa sigurnosnim kopijama.
  • D:\Backup\script\ - ovdje će se nalaziti naša skripta i WinSCP program.

1) Preuzmite najnoviju prilagođenu i prijenosnu verziju WinSCP-a s web stranice PortableApps - WinSCP Portable. Instalirajte program u mapu D:\Backup\script\ - tamo će se stvoriti mapa WinSCPPortable, au njoj će biti datoteka WinSCPPortable.exe.

2) Preuzmite arhivu sa skriptom i predlošcima ovdje - backup_sites_v1.2 i raspakirajte je u mapu D:\Backup\script\ .

3) Otvorite datoteku backup_sites_v1.2.bat za uređivanje i uredite stazu u odjeljku "WinSCP configuration":

  • "D:\Backup\script\WinSCPPortable\WinSCPPortable.exe" - put do WinSCP Portable;
  • "D:\Backup\script\WinSCPPortable\Data\settings\winscp.log" - staza na kojoj se stvara WinSCP Portable zapisnička datoteka.

Provjeravamo da staze navedene u skripti odgovaraju onima na kojima se nalazi WinSCP program, inače se jednostavno neće pokrenuti.

4) Stvaramo datoteke predložaka postavki za sigurnosno kopiranje web stranica. Postoji nekoliko njih u arhivi - preimenujte ih prema imenima domena vaših web stranica i izbrišite suvišne.

Stvoriti novi predložak mjesto za skriptu na sljedeće načine:

  1. Samo kopirajte INI datoteku i preimenujte je u pravo ime, a zatim uredite postavke u njemu;
  2. Generiramo predložak sa skriptom. Pokrenite skriptu, pritisnite 2 i unesite naziv domene ili naziv stranice (samo latinica i simbol _). Otvorit će se bilježnica s novostvorenom datotekom, nakon što napravite promjene, spremite je i zatvorite.

Koja je opcija prikladnija - odaberite sami.

5) Sve je spremno, možete pokrenuti skriptu i pokušati sigurnosno kopirati jednu od svojih stranica.

Nakon potvrde odabira mjesta za sigurnosno kopiranje, može se zatražiti SSH korisnička lozinka ako nije navedena u konfiguracijska datoteka. Odmah će se otvoriti prozor s zapisnikom programa WinSCP koji će prikazati napredak radnji na poslužitelju, kao i napredak preuzimanja gotove arhive s poslužitelja.

Kada WinSCP završi s preuzimanjem arhive, prozor će se zatvoriti.Za dovršetak skripte samo pritisnite bilo koju tipku u prozoru.

O sigurnosti podataka

Skripta tijekom svog rada generira privremena datoteka".tmp" sa skupom naredbi za WinSCP. Ova datoteka sadrži korisničko ime i lozinku za pristup poslužitelju putem SSH-a.

INI predlošci s postavkama stranice također sadrže važne informacije - to su parametri pristupa bazi podataka.

Izričito NE preporučujem pohranjivanje ove skripte i datoteka postavki na diskove, kojima se može izravno pristupiti u bilo kojem trenutku nakon pokretanja i jednostavnih manipulacija s računalom. Za pohranu možete napraviti šifrirani disk ili kupiti zasebni medij.

Ova skripta je samo alat koji štedi vrijeme na obavljanju rutinskih i sličnih radnji. Odvojite malo vremena i brinite o sigurnosti i sigurnosti svojih podataka!

Sva odgovornost za korištenje ove skripte leži na vama, budite izuzetno oprezni!

Zaključak

Skriptu je moguće ispraviti i modificirati kako bi bila funkcionalnija i izvršavala radnje koje su vam potrebne na vašim stranicama.

Također ovuda WinSCP automatizacija se može koristiti za izradu drugih skripti koje će obavljati različite zadatke na vašem VPS-u ili namjenskom poslužitelju putem konzole.

Postoji puno rezervnih metoda, ali za mene osobno one imaju svojih nedostataka zbog kojih ih ne koristim. Lakše je napisati nekoliko jednostavnih skripti, na primjer, koristeći takozvani bat-nickname ili PowerShell. U ovom članku ću vam reći kako možete postaviti sigurnosnu kopiju pomoću skripti, ja ih kombiniram i stvaram pakete.

Sigurnosna shema

U većini slučajeva backup se svodi na spremanje neke datoteke. To mogu biti slike virtualni strojevi, korisničke datoteke, sigurnosna kopija SQL baze podataka, istovar informacijske baze 1C:Enterprise itd. Ispravnije je pohraniti sve ove sigurnosne kopije datoteka na drugo mjesto, to može biti mrežna mapa, vanjski disk, pogon trake, ftp itd. Radi praktičnosti, koristim ftp poslužitelj.

Pogledajmo kako se sve to događa:

  1. Kopirajte ih ili premjestite u mapu za slanje u arhivu
  2. Provjeravam mapu za nove sigurnosne kopije
  3. Slanje datoteka u arhivu FTP poslužitelj
  4. Izbrišite stare sigurnosne kopije datoteka

U prvom paragrafu smo kreirali datoteke koje trebamo kopirati na naš FTP poslužitelj. Sada ih trebamo kopirati u mapu, koju ćemo poslati na FTP. Da biste to učinili, možete koristiti jednostavnu naredbu:

Kopiraj "SOURCE_FOLDER_PATH\* C:\Backup\

Izvođenjem ove naredbe sve naše datoteke će se kopirati u C:\Backup\. Ispuniti dana zapovijed ima smisla ako prikupljate sigurnosne kopije s različitih mjesta. Sada nam treba skripta koja će provjeriti mapu za nove datoteke i poslati ih na FTP poslužitelj. Stvorite prazna datoteka backup.ps1 i u nju napišite sljedeću skriptu.

$a = (Get-Host).UI.RawUI $a.WindowTitle = "(!LANG:Sinkronizirajte mapu na Ftp" $ftp = "ftp://АДРЕС_FTP_СЕРВЕРА/" $localDirectory = "C:\Backup" $user = "ИМЯ_ПОЛЬЗОВАТЕЛЯ" $pass = "ПАРОЛЬ" $webclient = New-Object System.Net.WebClient $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) $Files = Get-ChildItem $localDirectory | Where {$_.LastWriteTime -gt (Get-Date).AddDays(-1)} foreach ($File in $Files) { $LocalFile = $File.FullName Write-Host "Getting $File from $localDirectory" -Foreground "Red" $webclient.UploadFile($ftp + $File, $LocalFile) Write-Host "Puting $File to $ftp" -Foreground "Yellow" } Write-Host "Finished Sync to $ftp" -Foreground "Green" !}

Pogledajmo kako ova skripta radi. Prvo se postavljaju varijable koje označavaju poslužitelj, korisničko ime, lozinku, izvornu mapu. Zatim u retku $Files = Get-ChildItem $localDirectory | Gdje ($_.LastWriteTime -gt (Get-Date).AddDays(-1)) odabire sve datoteke čiji je datum izmjene veći (-qt) od trenutnog datuma minus 1 dan. Ovdje se možete prilagoditi svom rasporedu. Izrađujem sigurnosne kopije svaki dan. Zatim, u petlji, prolazimo kroz svaku datoteku koja zadovoljava uvjete i šaljemo je na FTP poslužitelj.

Kako ne bih zauzimao prostor na disku, brišem sigurnosne kopije starije od 30 dana. U principu, nakon slanja na FTP mogu se odmah obrisati, ja ih ostavljam samo da ne moram trošiti vrijeme preuzimajući ih s FTP-a ako mi iznenada zatrebaju, a i dodatna kopija sigurnosne kopije neće škoditi , nikad ne znate što će se dogoditi s FTP-om, pa ako prostor dopušta, preporučujem da ih također držite na izvornom poslužitelju.

Za čišćenje mape koristim skriptu removeOldBackups.ps1

$fullTargetPath = "C:\Backup" $deleteFiles = Get-Childitem $fullTargetPath -Recurse | Gdje ($_.LastWriteTime -lt (Get-Date).AddDays(-30)) | Foreach ( Remove-Item $_.FullName -Force -Recurse)

Izuzetno jednostavna skripta, objasnit ću samo jedan redak Where ($_.LastWriteTime -lt (Get-Date).AddDays(-30)) | ovaj redak uspoređuje datum izmjene datoteke s trenutnim datumom minus 30 dana, ova usporedba će uključiti datoteke čije je LastWriteTime manje od trenutnog datuma minus 30 dana. Ako je potrebno, možete ga prilagoditi svojim potrebama.

Sigurnosna kopija važnih informacija - svaki Administrator sustava suočava s takvim izazovom. Zadatak bi se činio trivijalan i neće pobuditi zanimanje kod mnogih čitatelja. Ali, recimo, meni bi takav članak u nekom trenutku puno pomogao, pa mislim da bi ovaj članak trebao biti.

Zadatak: Sigurnosna kopija podataka u lokalni imenik i na zaseban poslužitelj, koristeći minimalno softver treće strane, bilježeći i obavještavajući administratora u jabberu u slučaju kvarova. Sve osnovne funkcije većine softvera za automatsko sigurnosno kopiranje, ali bez njegove instalacije, a time i bez njegovih grešaka (koje su, zapravo, dovele do takve ideje).

A sada na posao.

Prvo, kreirajmo i otvorimo skriptu
nano backup-script
Sada u skriptu dodajte redak
#!/bin/bash
Deklarirajmo neke varijable.
TN - TASKNAME - naziv zadatka Koristi se za izlaz u dnevnik i određivanje naziva datoteke.
Budući da postoji nekoliko zadataka (mjesečno, tjedno, dnevno) i bilo je previše lijeno napisati skriptu za svaki slučaj, stvorio sam univerzalnu u kojoj samo trebate odkomentirati potrebne retke. Naziv zadataka mora biti napisan bez razmaka, po mogućnosti na latinici, ako ne želite probleme s kodiranjem i netočnim parametrima naredbi.
TN=dokumenti-mjesečno
#TN=dokumenti-tjednik
#TN=dokumenti-dnevno
OF - Output File - naziv izlazne datoteke. Dobiva se iz varijable TN, odnosno naziv posla.
OF=$TN.tar.gz
Deklariramo varijablu sa stazom do datoteke dnevnika, a zatim ćemo ispisati sve poruke o pogrešci, a ostatak u zapisnik.
LOGFILE=/var/log/backup.log
Upišimo u dnevnik početak sigurnosne kopije (datum, vrijeme, naziv zadatka)
echo >>$LOGFILE echo "========================================== == ========" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R")" >>$LOGFILE echo "Posao \"$TN\" započet. .. " >>$LOGFILE
Postoji problem da ako navedete imena direktorija s razmacima u parametrima naredbe (npr. tar), skripta ne uspijeva. Rješenje pronađeno na internetu - operacijska sala linux sustav koristi razmak kao standardni razdjelnik parametara naredbe. Redefinirajmo standardni razdjelnik (pohranjen u varijabli $IFS) koji nije razmak, na primjer \n - znak za prijelom retka.
Zapamtite staru vrijednost standardnog separatora
OLD_IFS=$IFS
Standardni separator zamjenjujemo vlastitim
IFS=$"\n"
SRCD - SourCe Directory - direktorij s podacima za backup
Sada možete navesti nekoliko direktorija, razdjelnik će biti prijelom retka, kao što smo sami naveli u retku iznad
SRCD="/mnt/source/folder_1 /mnt/source/folder_2 /mnt/source/folder_N"
TGTD - TarGeT Directory - direktorij u koji će biti pohranjene sigurnosne kopije
TGTD="/var/sigurnosne kopije/"
Naravno, razumijemo da je pohranjivanje važnih sigurnosnih kopija samo na izvor u najmanju ruku neozbiljno. Stoga ćemo ostaviti kopiju na udaljenom resursu, koju ćemo zasebno montirati pomoću mount i fstab. Odmah ću objasniti zašto sam koristio mount i fstab, a ne samo mount - ovaj direktorij montiram u svojim drugim skriptama, ali kao što je jedan moj poznati programer rekao - dobar programer neće napisati isti kod dvaput (nekako se ne sjećam doslovce, ali nadam se da sam prenio značenje).
TGTD2="/mnt/arhiva/"
Sam proces arhiviranja u opciji „Kreiraj nova arhiva"
tar -czf $TGTD$OF $SRCD &>>$LOGFILE
i u opciji "Ažuriraj datoteke u staroj arhivi"
tar -u -f $TGTD$OF $SRCD &>>$LOGFILE
U drugom slučaju, bolje je koristiti određeni naziv datoteke umjesto $OF, jer, na primjer, imam tjednu arhivu koja se ažurira dnevno, a njihovi $TN (nazivi zadataka) ne odgovaraju, odnosno, $OF.

U varijabli "?" Status izvršenja zadnje naredbe je pohranjen. Spremimo ga za kasnije korištenje.
STATUS=$?
Vraćamo standardni separator na izvornu vrijednost
IFS=$OLD_IFS
Sada dodajmo uvjet - ako je proces pakiranja u tar arhiva završilo s pogreškom, pošaljite poruku administratoru, izbrišite neuspjelu datoteku sigurnosne kopije. Inače, nastavljamo dalje - montiramo mrežnu kuglu i u nju bacamo kopiju arhive. Nakon svake operacije provjeravamo rezultat izvršenja, pišemo logove i ili nastavljamo ili obavještavamo admina i prekidamo proceduru.
if [[ $STATUS != 0 ]]; zatim rm $TGTD$OF &>>$LOGFILE echo "#################################### # #####" >>$LOGFILE echo "### Došlo je do pogreške! Sigurnosno kopiranje nije uspjelo. ###" >>$LOGFILE echo "################## # ###########################" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile " ) $OF sigurnosna kopija nije stvorena" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE else echo "Datoteka sigurnosne kopije spremljena kao \"$TGTD$OF\"" >>$LOGFILE echo "Sigurnosna kopija uspješno završena u $(datum +"%R %d-%b-%Y")!" >>$LOGFILE echo "Montiraj datotečni sustav za $TGTD_archive sigurnosnu arhivu" >>$LOGFILE montiraj $TGTD2 &>>$LOGFILE if [[ $? != 0]]; zatim echo "################################################### # ##############" >>$LOGFILE echo "### Došlo je do pogreške prilikom montiranja pomoćnog resursa ###" >>$LOGFILE echo "####### ### ################################################# #### #" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile") $OF sigurnosna kopija nije kopirana u sigurnosnu kopiju" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE exit fi echo "Počelo kopiranje datoteke u sigurnosnu kopiju" >>$LOGFILE cp -f $TGTD$OF $TGTD_archive$OF &>> $ LOGFILE if [[ $? != 0]]; zatim echo "################################################### # ##############" >>$LOGFILE echo "### Došlo je do pogreške tijekom kopiranja u sigurnosnu kopiju ###" >>$LOGFILE echo "######## # #################################################### ## ##" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile") $OF sigurnosna kopija nije kopirana u rezervni resurs" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE else echo "Kopiranje datoteke uspješno dovršeno u $(datum +"%R %d-%b-%Y")!" >>$LOGFILE echo "Datoteka kopirana kao \"$TGTD_archive$OF\"" >>$LOGFILE fi echo "Demontiraj datotečni sustav za sigurnosnu arhivu $TGTD_archive" >>$LOGFILE umount $TGTD2 &>>$LOGFILE echo "Sve operacije uspješno završeno!" >>$LOGFILE fi izlaz

U tom procesu kopiramo arhivu iz lokalne pohrane u udaljenu. Naravno, provjeravamo je li svaka operacija uspješno završena i sve upisujemo u zapisnike.
Za slanje poruke administratoru koristim XMPP poruku, budući da organizacija ima Jabber poslužitelj, a ja volim primati brza poruka o neuspjehu nego da ulazim u mail, ubacujem lozinke, čačkam po poveznicama i čekam da mi preglednik sve prikaže. U svakom slučaju, nitko vam ne brani da koristite sendmail umjesto sendxmppa.
Datoteka /usr/local/etc/XMPP_settings ima sljedeći sadržaj:

#sender_login@domain;jabber_server_ip:jabber_server_port sender_password [e-mail zaštićen];127.0.0.1:5222 lozinka
NA fstab datoteka niz koji opisuje vezu Windows dijeljenja
//192.168.0.250/arhiv /mnt/archive cifs noauto,rw,iocharset=utf8,cp866,file_mod=0666,dir_mod=0777,noexec,_netdev,credentials=/root/.passwd_to_archive_directory 0 0
Sada ostaje samo dodati zadatak u cron. To se može učiniti pomoću datoteke /etc/crontab, ali ja, zbog navike GUI-a, naslijeđene od Windowsa, koristim web sučelja za takve slučajeve. Naredba se mora pokrenuti kao root, to je, na primjer, sudo bash backup_script. Dodavanjem naredbe u cron možete odrediti da će se odmah izvršiti u ime roota

Tijekom rasprava pokrenut je problem rasta balvana. Krenuo sam najjednostavnijim (po mom mišljenju) putem: pohranit ćemo samo zadnjih N redaka dnevnika, na primjer 300. Dva retka bit će dodana u skriptu u kojoj ćemo spremiti zadnjih 300 redaka dnevnika u privremenu datoteku, onda ćemo s njom obrisati dnevnik
tail -n 300 $LOGFILE >/tmp/unique_fantastic_filename.tmp mv -f /tmp/unique_fantastic_filename.tmp $LOGFILE
Evo cijelog teksta scenarija:
#!/bin/bash TN=docs-monthly #TN=docs-weekly #TN=docs-daily OF=$TN.tar.gz LOGFILE=/var/log/backup.log echo >>$LOGFILE echo "== =================================================== = " >>$LOGFILE echo "$(datum +"%d-%b-%Y %R")" >>$LOGFILE echo "Posao \"$TN\" započet..." >>$LOGFILE OLD_IFS= $ IFS IFS=$"\n" SRCD="/mnt/source/folder_1 /mnt/source/folder_2 /mnt/source/folder_N" TGTD="/var/backups/" TGTD2="/mnt/archive/" tar - czf $TGTD$OF $SRCD &>>$LOGFILE #tar -u -f $TGTD$OF $SRCD &>>$STATUS LOGFILE=$? IFS=$OLD_IFS if [[ $STATUS != 0 ]]; zatim rm $TGTD$OF &>>$LOGFILE echo "#################################### # #####" >>$LOGFILE echo "### Došlo je do pogreške! Sigurnosno kopiranje nije uspjelo. ###" >>$LOGFILE echo "################## # ###########################" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile " ) $OF sigurnosna kopija nije stvorena" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE else echo "Datoteka sigurnosne kopije spremljena kao \"$TGTD$OF\"" >>$LOGFILE echo "Sigurnosna kopija uspješno završena u $(datum +"%R %d-%b-%Y")!" >>$LOGFILE echo "Montiraj datotečni sustav za $TGTD_archive sigurnosnu arhivu" >>$LOGFILE montiraj $TGTD2 &>>$LOGFILE if [[ $? != 0]]; zatim echo "################################################### # ##############" >>$LOGFILE echo "### Došlo je do pogreške prilikom montiranja pomoćnog resursa ###" >>$LOGFILE echo "####### ### ################################################# #### #" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile") $OF sigurnosna kopija nije kopirana u sigurnosnu kopiju" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE exit fi echo "Počelo kopiranje datoteke u sigurnosnu kopiju" >>$LOGFILE cp -f $TGTD$OF $TGTD_archive$OF &>> $ LOGFILE if [[ $? != 0]]; zatim echo "################################################### # ##############" >>$LOGFILE echo "### Došlo je do pogreške tijekom kopiranja u sigurnosnu kopiju ###" >>$LOGFILE echo "######## # #################################################### ## ##" >>$LOGFILE echo "$(datum +"%d-%b-%Y %R%nFile") $OF sigurnosna kopija nije kopirana u rezervni resurs" | sendxmpp -t -f /usr/local/etc/XMPP_settings recipient_login@domain &>>$LOGFILE else echo "Kopiranje datoteke uspješno dovršeno u $(datum +"%R %d-%b-%Y")!" >>$LOGFILE echo "Datoteka kopirana kao \"$TGTD_archive$OF\"" >>$LOGFILE fi echo "Demontiraj datotečni sustav za sigurnosnu arhivu $TGTD_archive" >>$LOGFILE umount $TGTD2 &>>$LOGFILE echo "Sve operacije uspješno završeno!" >>$LOGFILE fi tail -n 300 $LOGFILE >/tmp/unique_fantastic_filename.tmp mv -f /tmp/unique_fantastic_filename.tmp $LOGFILE izlaz

Hvala svima na pažnji!

I tako, kratki izvod iz teorijskog znanja koje nam je potrebno:

Možete izraditi sigurnosne kopije na mrežni resurs ili na posebnom svesku. Kopiranje na mrežni dio ima par značajne nedostatke: prvo, ako postoje problemi s mrežom (tijekom arhiviranja), sigurnosna kopija očito neće biti izrađena, a drugo, mrežna mapa može sadržavati samo jednu sigurnosnu kopiju (kopiranjem sigurnosne kopije u istu mrežnu mapu kao i prije, uništavate prethodna sigurnosna kopija).

Kopiranje na zasebnu jedinicu vrši se na sljedeći način: mapa WindowsImageBackup\ stvara se na ciljnoj jedinici<naziv računala>\. U ovoj će se mapi zauzvrat stvoriti virtualni diskovi(jedan za svaki volumen koji se sigurnosno kopira), na koji će se izvršiti sigurnosno kopiranje. Nakon dovršetka kopiranja stanje virtualnih diskova koji pohranjuju sigurnosne kopije bit će spremljeno pomoću usluge kopija u sjeni. Tijekom sljedećeg arhiviranja izvršit će se iste radnje, kao rezultat toga, ispostavit će se da će svaka određena arhiva biti dostupna prilikom pristupa određenoj kopiji u sjeni. Štoviše, sa stajališta programa za arhiviranje, svaka će takva arhiva biti puna arhiva, a sa stajališta korištenog prostora bit će inkrementalna (kopija u sjeni pohranjuje informacije samo o promijenjenim blokovima podataka).

Podaci o dovršenom procesu arhiviranja pohranjeni su na nekoliko mjesta u OS-u, koja, slučajno, mogu sadržavati nedosljedne informacije. Jasno je da stvarni broj sigurnosnih kopija pohranjenih lokalno na računalu ne može biti veći od broja kopija u sjeni volumena koji je sigurnosno kopiran. Možete vidjeti podatke o broju kopija u sjeni, na primjer, u naredbeni redak pomoću naredbe diskshadow(i njegove podnaredbe navesti sjene sve). Međutim, kopije u sjeni ne sadrže dovoljno informacija potrebnih za izradu sigurnosne liste, pa su te informacije preuzete s drugih mjesta. Tako, na primjer, OS prati arhivske kopije u direktoriju globalne arhive, kao iu dnevniku Windows događaji zapisnik sigurnosne kopije poslužitelja. Informacije iz tih izvora prikazuju se u dodatku Data Archiving System. Windows poslužitelj". Kao rezultat toga, može doći do takve situacije da će nam oprema pokazati proturječne informacije koje nemaju nikakve veze sa stvarnošću.

Pogledajte snimak zaslona. Napravljen je u sustavu za koji lokalni disk pohranjene su samo dvije arhive (bile su samo dvije kopije u sjeni) i nijedna mrežna arhiva nije stvorena. Međutim, snap-in nam u odjeljku “All archives” govori da navodno imamo 6 arhiva, au prozoru s porukom vidimo izvještaj o stvaranju samo 3 arhive. Kako bismo natjerali OS da prikazuje konzistentne informacije koje odgovaraju stvarnosti, morat ćemo inicijalizirati sve komponente sustava arhiviranja koje pohranjuju podatke o sigurnosnim kopijama ili same sigurnosne kopije. Da bismo to učinili, morat ćemo očistiti dnevnik sigurnosne kopije sustava Windows, izbrisati globalni direktorij arhiva (koristeći naredbu wbadmin brisanje kataloga) i izbrišite sve kopije u sjeni (koristeći naredbu diskshadow izbriši sve sjene). Uglavnom, informacije pohranjene u sigurnosna kopija sustava Windows log je isključivo informativne prirode i ne utječe na proces vraćanja informacija iz arhive, ako je potrebno, što se ne može reći za informacije pohranjene u globalnom katalogu. Ako je globalni katalog oštećen, nećemo moći vratiti podatke pomoću standardnih Windows alata za arhiviranje. Međutim, iz oštećenog ili izbrisanog globalnog arhivskog kataloga može se obnoviti sigurnosna kopija, koji se stvara svaki put kada arhivirate u mapi WindowsImageBackup\<naziv računala>\. Da biste vratili oštećeni globalni arhivski katalog, prvo ga morate izbrisati (koristeći naredbu wbadmin brisanje kataloga), a zatim vratite iz sigurnosne kopije (koristeći naredbu wbadmin vraćanje kataloga).

Pa, sada ću, zapravo, objaviti pričuvnu skriptu:

Write-Verbose "Beginning..." #Spremite vrijednost varijable okoline $VerbosePreference $tmpVerbpref=$VerbosePreference $VerbosePreference="Nastavi" #Put do mrežne mape u koju ćemo kopirati arhivu $NetworkBackupPath="\\SRV66\ Backup$\SRV02 \BMR" #Naziv particije na kojoj ćemo kreirati arhivu $VolumeTarget="D:" # Broj sigurnosnih kopija koje će se pohraniti na lokalni medij $BackupQuantity=3 # Broj sigurnosnih kopija koje će se pohraniti na mrežni medij $NetBackupQuantity=5 # Put do datoteke-popis sigurnosnih kopija $csvFile="D:\Backup\ProfileBackup.csv" # Put do mape u kojoj ćemo kreirati 7zip arhivu $Path2Arc="D:\Backup" # omogućite dodatak za sigurnosno kopiranje poslužitelja Windows.Serverbackup dodatak -ErrorAction SilentlyContinue # kreirajte zadatak sigurnosnog kopiranja $policy = New-WBPolicy<# # создаём и добавляем в задание бэкапа о бэкапируемых файлах $source = New-WBFileSpec -FileSpec "C:\Users" Add-WBFileSpec -Policy $policy -FileSpec $source #># #Dohvati popis kritičnih volumena $VolSources = Get-WBVolume -CriticalVolumes #Dodaj volumene za sigurnosno kopiranje Add-WBVolume -Policy $policy -Volume $VolSources #Define VSS Backup Options Set-WBVssBackupOptions -policy $policy -VssCopyBackup #Enable SystemState backup Add-WBSystemState -policy $policy #Enable Bare Metal Recovery Add-WBBareMetalRecovery -Policy $policy # # odredite lokalni volumen na koji će se arhiva kopirati $target = New-WBBackupTarget -VolumePath $VolumeTarget Add-WBBackupTarget -Policy $policy -Target $target Write-Verbose "Započnite proces stvaranja sigurnosne kopije" # izvršite sigurnosnu kopiju Start-WBBackup -Policy $policy # provjerite povratni kod s rezultatom sigurnosne kopije if ((Get-WBSummary).LastBackupResultHR -eq 0 ) ( # preimenujte arhivu u prijateljskije ime $newname = "_Backup_$(Get-Date -f yyyyMMddHHmm)" Write-Verbose "Preimenujte mapu s novostvorenom arhivom u $newname ..." Ren $VolumeTarget\WindowsImageBackup -NovoIme $novoime # Za komprimirajte arhivu koristeći 7zip $arc="C:\Program Files\7-Zip\7z.exe" $arc_params="a -t7z -m0=LZMA2 -mmt -mx9" $arc_source="$VolumeTarget\$newname" $ ​​arc_dest ="$Path2Arc\$newname.7z" Write-Verbose "Komprimiraj mapu $newname sa 7zip u $newname.7z" Start-Process $arc -ArgumentList "$arc_params $arc_dest $arc_source" -Pričekaj # kopiraj arhivu u mrežnu mapu # kopirajte $VolumeTarget\$newname $NetworkBackupPath -Recurse Write-Verbose "Kopiranje datoteke $arc_dest u mrežnu mapu..." kopirajte "$arc_dest" $NetworkBackupPath ako ($?) arhivu i mapu koja je upakirana u ovu arhivu del "$arc_dest" -Force -Verbose del $VolumeTarget\$newname -Recurse -Force #-Verbose ) # brisanje starih arhiva iz mrežnu mapu, osim za najnovije $BackupQuantity arhive $NetBackups=dir $NetworkBackupPath | ?($_.Name -match "_.+(\d)+\.7z$") $NetBackupsCount=$NetBackups.count if (($NetBackupsCount - $NetBackupQuantity) -gt 0) ( $NetBackups | sort lastwritetime | select -First ($NetBackupsCount - $NetBackupQuantity) | del -Force -Verbose #-Recurse -WhatIf ) # čitanje našeg vlastitog direktorija sigurnosne kopije [e-mail zaštićen]() if (Test-Path $csvFile) ($csv = @(Import-Csv $csvFile)) # čitanje podataka posljednje sigurnosne kopije $current = Get-WBBackupSet | odaberite -Zadnji 1 | odaberite VersionID, SnapshotId # i dodajte ga nizu live backup objekata $csv += $current # kako ne bi bilo zabune, ponovo sortirajte objekte i pišite nazad u CSV datoteku $csv | poredaj @(Izraz=(($_.VersionId)))| odaberite -Last $BackupQuantity | Export-Csv $csvFile -NoTypeInformation # i izbrojite koliko zapisa ima $count = $csv.count # ako ima više zapisa od BackupQuantity, tada izbrojite koliko dodatnih arhiva treba izbrisati. # ako ima manje BackupQuantity unosa, tada ništa ne treba brisati i samo dodajte novi unos if ($count -gt $BackupQuantity) ( $old = $count - $BackupQuantity # generirajte nasumično ime za skriptu koja će se koristiti u diskshadow $file = : :GetRandomFileName() # odaberite sve nepotrebne arhive i proslijedite ih kroz cjevovod za uklanjanje $csv | sort @(Expression=(($_.VersionId)))| select -First $old | %( # Read-Host "Pritisnite Enter za nastavak..." | Out-Null #Write-Verbose $file ##Read-Host "Pritisnite Enter za nastavak..." | Out-Null # napišite naredbu u privremenu datoteku "delete shadows ID ($($_.SnapshotID ))"|Out-File -FilePath $Env:TEMP\$file -Encoding OEM #gc $Env:TEMP\$file #Read-Host "Pritisnite Enter za nastavak..." | Out-Null # i pokreni diskshadow u načinu skripte diskshadow /s $Env:TEMP\$file | Out-Default ) del $Env:TEMP\$file ) ) else ( # kunem se da sigurnosna kopija nije uspješno dovršena Write-Verbose "Sigurnosna kopija nije uspjela" ) Write-Verbose "Skripta završila s radom tu" #Vrati vrijednost varijable okoline $VerbosePreference $VerbosePreference=$tmpVerbpref

Ažurirano: 21.07.2017 Objavljeno: 15.08.2016

Ova skripta je napisana u pokrenutoj Unix ljusci operacijski sustav centosi. Radit će na većini sustava Linux obitelji i BSD.

Primjer skripte

Skripta će stvoriti vlastiti dump za svaku bazu podataka. Ovo je neophodno za brz oporavak podaci.

  1. #!/bin/bash
  2. PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  3. odredište="/backup/mysql"
  4. userDB="sigurnosna kopija"
  5. passwordDB="sigurnosna kopija"
  6. fdate=`datum +%Y-%m-%d`
  7. pronađi $destination -type d \(-name "*-1[^5]" -o -name "*-?" \) -ctime +30 -exec rm -R () \; 2>&1
  8. pronaći $destination -type d -name "*-*" -ctime +180 -exec rm -R () \; 2>&1
  9. mkdir $destinacija/$fdate 2>&1
  10. za dbname u `echo prikazati baze podataka| mysql -u$userDB -p$lozinkaDB | grep -v baza podataka`; čini
  11. slučaj $dbname u
  12. informacijska_shema)
  13. nastaviti ;;
  14. mysql)
  15. nastaviti ;;
  16. shema_izvedbe)
  17. nastaviti ;;
  18. test)
  19. nastaviti ;;
  20. *) mysqldump --databases --skip-comments -u$userDB -p$passwordDB $dbname | gzip > $destination/$fdate/$dbname.sql.gz ;;
  21. učinjeno;

Opis scenarija

1 Navedite put do tumača.
2 Sistemske varijable postavljamo tako da ne moramo pisati pune staze do izvršnih datoteka u skripti.
4 - 7 Postavljamo varijable.
4 Direktorij u koji ćemo spremati sigurnosne kopije.
5 Račun za povezivanje s bazom podataka.
6 Lozinka za spajanje na bazu podataka.
7 Datum pokretanja skripte.
9 Pronalazimo sve sigurnosne kopije koje su starije od 30 dana i brišemo ih. Spisi ostavljamo u arhivu 15.
10 Izbrišite sve sigurnosne kopije starije od 180 dana.
11 Napravite direktorij u koji ćemo spremati sigurnosne kopije. Kao naziv direktorija koristimo datum pokretanja skripte u formatu GGGG-MM-DD.
13 - 25 Spajamo se na bazu podataka i izvlačimo popis svih baza podataka. Izrađujemo sigurnosnu kopiju svakog.
15 - 22 Preskačemo servisne baze podataka information_schema, mysql, performance_schema, test.
23 Izrađujemo sigurnosnu kopiju za baze podataka.

Priprema sustava

Povezivanje s bazom i izrada račun s pravom stvaranja sigurnosnih kopija:

> ODOBRITE ODABIR, PRIKAŽI POGLED, PONOVNO UČITAJ, KLIJENT REPLIKACIJE, DOGAĐAJ, OKIDAJ, ZAKLJUČAJ TABLICE NA *.* NA [e-mail zaštićen] IDENTIFICIRAN PREMA "backup";

* u ovom primjeru stvaramo račun sigurnosna kopija sa lozinkom sigurnosna kopija.

Napravite direktorij u koji će biti pohranjene sigurnosne kopije:

mkdir -p /backup/mysql

Spremanje podataka na udaljeno računalo

Sigurnosne kopije moraju biti napravljene na udaljeno računalo ili vanjski disk tako da budu dostupni kada poslužitelj padne. Ovaj primjer koristi dijeljenu mapu na udaljeni poslužitelj, koji će sadržavati datoteke iz sigurnosne kopije.

Kako biste pojednostavili postupak montiranja mrežne mape, otvorite sljedeću datoteku za uređivanje:

i dodajte mu sljedeći redak:

//192.168.0.1/backup /mnt cifs user,rw,noauto,credentials=/root/.smbclient 0 0

* u ovom primjeru, dijeljena mapa je montirana sigurnosna kopija na poslužitelju s IP adresom 192.168.0.1 katalogizirati /mnt. Koristi se kao mrežni datotečni sustav cifs(SMB protokol: samba server ili Windows dijeljenje). Parametri za povezivanje - korisnik: omogućuje svakom korisniku montiranje rw: s dopuštenjem za čitanje i pisanje, auto: ne postavljajte automatski pri pokretanju sustava, vjerodajnice: datoteka koja sadrži korisničko ime i lozinku za povezivanje na dijeljenu mapu.

Kreirajmo sada datoteku s korisničkim imenom i lozinkom:

#vi /root/.smbclient

i dovedite ga u sljedeći obrazac:

korisničko ime=rezervna kopija
lozinka=sigurnosna kopija

* Korisničko ime: Korisničko ime, zaporka: zaporka. Naravno, u vašem slučaju navedeni su vaši podaci.

Sada unesite sljedeću naredbu.

Najpopularniji povezani članci