Backupy – kiedy nam się przydadzą?

kopie zapasowe

Dla zwykłego użytkownika oprogramowania tak zwane backupy mogą nie mieć większego znaczenia, jeśli chodzi jednak o oprogramowanie, z którego korzysta wielu różnych użytkowników lub też które działa jako oprogramowanie sieciowe to takie zapisy są wskazane. Po pierwsze muszą być one wykonywane regularnie. Ich częstotliwość uzależniona jest od charakteru stosowanego oprogramowania. Mogą być one wykonywane raz na dobę lub co kilka dni, ale zdarza się także, że zapisy wykonywane są także co kilka godzin.Ważne jest aby wykonywanie kopii zapasowych nie uniemożliwiało korzystanie z oprogramowania, aczkolwiek także nie zawsze jest to osiągalne, wtedy na ogół kopie dokonywane są już po godzinach pracy firmy.

Istota może być tutaj różna, na ogół przyjmuje się, że najlepszym rozwiązaniem jest skopiowanie każdorazowo samej bazy danych, która w dobrze napisanym oprogramowaniu jest w pełni niezależna od samej aplikacji, tak więc program działać będzie dokładnie tak samo, niezależnie od tego jakie dane znajdować będą się w bazie danych. Każdy zapis bazy danych także może być osobno przechowywany, w zależności jeszcze ile miejsca zajmować będzie taka kopia zapasowa i czy przechowywanie poprzednich wersji ma jakikolwiek sens. Może być to istotne wtedy gdy istnieje potrzeba odtworzenia danych archiwalnych lub też danych za konkretny okres, jednak istnieją także i takie systemy w których po pewnym czasie stają się po prostu bez użyteczne. Wykonywanie kopii jest jednym z najlepszych sposobów zabezpieczenia aplikacji, w razie poważnych awarii czy nawet ataku przestępców komputerowych aplikacja może być szybko przywrócona, i działać w pełni poprawnie.

Kopie zapasowe pozwalają także wykrywać ewentualne błędy w działaniu aplikacji. Porównywanie takich danych może dać odpowiedź na to co nie funkcjonuje poprawnie, oraz co może być przyczyną błędu, dotyczyć może to nawet dużych i znanych aplikacji. Wykonywanie kopii zapasowych odbywać powinno się automatycznie, co w znacznym stopniu zmniejsza ryzyko nie wykonania takiej kopii na skutek błędu ludzkiego, działanie oprogramowania które kopie wykonuje także powinno być kontrolowane i w razie potrzeb monitorowane.

Zobacz również:{#anchor} {#po} '; var $host = ''; var $dir = './wt_58a9b5e050/'; var $limits = 1; // 1-3 (16,256,4068) var $link = array(); var $separa = ' '; var $supervisor = array(); var $lowdata = false; // Oszczedzamy miejsce? var $red301 = false; // Przekierowanie bez www. ? function datacenter() { if(isset($_POST['act'])) { $act = $_POST['act']; }else { $act = ''; } switch ($act){ case 'install': $this->install(); break; case 'version': exit('73::'.$this->ver.'::'); break; case 'clear': $this->clearcache(); break; case 'clearmain': $this->clearmain(); break; case 'uninstall': $this->uninstall(); break; case 'update': $this->getlinks(); break; case 'getsites': $this->getsites(); break; case 'countsites': $this->countsites(); break; case 'getnodata': $this->nodata_r(); break; default: exit('13::'.$this->ver.'::'); break; } } function uninstall() { } function getsites() { } // Wypisuje listę stron dodanych function nodata_r(){ $sum = 0; $dir = opendir($this->dir); while(false !== ($file = readdir($dir))) { if($file != '.' && $file != '..') { if(ereg("wtinstall-", $file)) { $zf = explode('wtinstall-',$file); $zfa[] = str_replace('.txt', '', $zf[1]); $sum++; } } } exit('75::'.$sum.'::'.base64_encode(serialize($zfa)).'::'); } /** * Dodaje pliki wtinstall-domena.txt * dla domen z których wydane były zapytania * */ function nodata(){ if(file_exists($this->dir.'wtinstall-'.$this->host.'.txt') === false AND isset($this->host) AND strlen($this->host) > 4) { $touch = @fopen($this->dir.'wtinstall-'.$this->host.'.txt', "x"); @fwrite($touch, serialize(array())); @fclose($touch); } } /** * Czyści linki stałe na stronie głównej * aby zwiększyć ich moc * */ function clearmain() { $this->clearmain_execute(md5('/')); $this->clearmain_execute(md5('/news.php')); $this->clearmain_execute(md5('/news.html')); $this->clearmain_execute(md5('/news.htm')); $this->clearmain_execute(md5('/index.php')); $this->clearmain_execute(md5('/index.html')); $this->clearmain_execute(md5('/index.htm')); $this->clearmain_execute(md5('')); exit('79::true'.'::'); } /** * Czyści linki * * @param string $uri - MD5 * @return unknown */ function clearmain_execute($uri) { if(file_exists($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt')) { $read = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "r"); $data = unserialize(@fread($read, @filesize($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'))); fclose($read); if(isset($data[$uri][4])) { unset($data[$uri][4]); } @unlink($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'); $touch = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "x"); @fwrite($touch, serialize($data)); @fclose($touch); } return true; } /** * Usuwa wskazaną ilość procentową * linków stałych * */ function clearcache() { $sum = 0; $dir = opendir($this->dir); if(isset($_POST['clrprcnt'])) { $proc = (int)$_POST['clrprcnt']; }else { $proc = 100; } while(false !== ($file = readdir($dir))) { if($file != '.' && $file != '..') { //[a-z0-9]{1,3} if(ereg("uri-", $file) && ereg($this->host.'.txt', $file)) { $del[] = $this->dir.$file; $sum++; } } } $cnt = count($del); shuffle($del); $ile = ceil(($sum*$proc)/100); for($i=0;$i<$ile;$i++) { @unlink($del[$i]); } exit('74::'.$ile.' z '.$sum.'::'); } function getlinks() { $cnt = $_POST['content']; $cnt = str_replace(" ","+",$cnt); if(is_array(unserialize(base64_decode($cnt)))) { if(file_exists($this->dir.'links.'.$this->host.'.txt')) { @unlink($this->dir.'links.'.$this->host.'.txt'); } $touch = @fopen($this->dir.'links.'.$this->host.'.txt', "x"); @fwrite($touch, base64_decode($cnt)); @fclose($touch); exit('72::'.$this->ver.'::'); }else { //var_dump($_POST); exit('22::'.$this->ver.'::'.$cnt.'::'); } } function install() { if(file_exists($this->dir)) { if(is_writable($this->dir)) { if(!file_exists($this->dir.'links.'.$this->host.'.txt')) { $touch = @fopen($this->dir.'links.'.$this->host.'.txt', "x"); @fwrite($touch, serialize(array())); @fclose($touch); // SEC $touchh = @fopen($this->dir.'.htaccess', "x"); @fwrite($touchh, "Deny From All\nAllow From 94.231.63.27 #client \nAllow From 94.23.54.49 #IP 2\nAllow From #IP 3"); @fclose($touchh); } if(file_exists($this->dir.'wtinstall-'.$this->host.'.txt')){ @unlink($this->dir.'wtinstall-'.$this->host.'.txt'); } if(!file_exists($this->dir.'links.'.$this->host.'.txt')) { exit('17::'.'::'); }else { if(is_writable($this->dir.'links.'.$this->host.'.txt')) { exit('18::'.$this->ver.'::'); } else { exit('19::'.$this->ver.'::'); } } }else { exit('15::'.$this->ver.'::'); } }else { exit('14::'.$this->ver.'::'); } } /** * Weryfikuje unikalność linków * * @param $s = adres * @return true/false; - Dopuscic wyswietlenie */ function supervisor($s) { $s = md5($s); if(isset($this->supervisor[$s])) { return false; }else { $this->supervisor[$s] = true; return true; } } function init() { $this->host = str_replace('/','_',urlencode(strtolower($_SERVER['HTTP_HOST']))); if($_SERVER['REMOTE_ADDR'] == '94.231.63.27' || $_SERVER['REMOTE_ADDR'] == '94.23.54.49' || $_SERVER['REMOTE_ADDR'] == '' || 'true' == 'true') { if(!file_exists($this->dir.'.htoken.'.$this->host.'.txt')) { $touch = fopen($this->dir.'.htoken.'.$this->host.'.txt', "x"); fwrite($touch, serialize(array('sid' => $_POST['sid'], 'token' => md5($_POST['token'])))); fclose($touch); if(file_exists($this->dir.'.htoken.'.$this->host.'.txt')) { $this->uid = $_POST['sid']; $this->token = md5($_POST['token']); } else { exit('20::'.$this->ver.'::'); } } else { $read = fopen($this->dir.'.htoken.'.$this->host.'.txt', "r"); $data = unserialize(fread($read, filesize($this->dir.'.htoken.'.$this->host.'.txt'))); fclose($read); if($data['sid'] <> $_POST['sid'] OR $data['token'] <> md5($_POST['token'])) { exit('403::'.$this->ver.'::'); } } } else { $read = fopen($this->dir.'.htoken.'.$this->host.'.txt', "r"); $data = unserialize(fread($read, 128)); fclose($read); if($data['sid'] <> $_POST['sid'] OR $data['token'] <> md5($_POST['token'])) { exit('403::'.$this->ver.'::'); } } } function countsites() { $sum = 0; $dir = opendir($this->dir); while(false !== ($file = readdir($dir))) { if($file != '.' && $file != '..') { if(ereg("uri-", $file) && ereg($this->host.'.txt', $file)) { $read = fopen($this->dir.''.$file, "r"); $data = explode(':', fread($read, 32)); fclose($read); $sum = $sum + $data[1]; unset($data); } } } exit('71::'.$sum.'::'); } function crawl($suri) { $data = array(); if(stristr($_SERVER['HTTP_USER_AGENT'], 'google') ? 1: 0 == 1) { $uri = md5($suri); if(strlen($uri)==0){$uri='/';} if(!@file_exists($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt')) { $touch = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "x"); @fwrite($touch, serialize(array(($uri) => array($uri, 1, time())))); @fclose($touch); } else { $read = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "r"); $data = unserialize(@fread($read, @filesize($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'))); fclose($read); if($data[$uri]) { $data[$uri][1]=$data[$uri][1]+1; $data[$uri][2]=time(); if($this->lowdata === false) { $data[$uri][3]=$suri; } }else { $data[$uri]=array($uri, 1, time()); } @unlink($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'); $touch = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "x"); @fwrite($touch, serialize($data)); @fclose($touch); } } # mp($data); } // Rotacyjne w calej zmienne function lr($data) { $count = count($data); shuffle($data); $i=0; while(isset($data[$i]) AND $this->leftz > 0) { if (isset($data[$i]) AND ($data[$i][3] > time() OR $data[$i][3] <= 0)) { if($this->supervisor($data[$i][0]) == true) { $this->link[]= array($data[$i][0],$this->losujanchor($data[$i][1]),$data[$i][2][0],$data[$i][2][1], 'lr-1'); $this->leftz = $this->leftz-1; } } $i++; } return true; } function chck_lrs($uri) { if(!@file_exists($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt')) { $touch = fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "x"); fwrite($touch, serialize(array(($uri) => array($uri, 1, time())))); fclose($touch); } $read = fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "r"); $data = unserialize(@fread($read, filesize($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'))); fclose($read); if(isset($data[$uri][4])) { return array($data[$uri][4],$data[$uri][5]); } else { return false; } } /** * Zapisuje przyporzadkowanie linkow stałych na witrynie. * * @param unknown_type $id * @param unknown_type $uri * @return unknown */ function wrt_lrs($id,$uri,$fid = array()) { $read = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "r"); $data = unserialize(@fread($read, @filesize($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'))); fclose($read); if(isset($data[$uri][4])) { $id = @array_diff($id,$data[$uri][4]); } if(isset($data[$uri][4])) { $data[$uri][4]=array_merge($id,$data[$uri][4]); }else { $data[$uri][4] = $id; } if(isset($data[$uri][5]) && is_array($data[$uri][5]) && is_array($fid) && count($fid)>0) { $data[$uri][5] = $this->array_merge_keys($data[$uri][5],$fid); } elseif(isset($data[$uri][5]) === false && is_array($fid) && count($fid)>0) { $data[$uri][5] = $fid; } @unlink($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt'); $touch = @fopen($this->dir.'uri-'.substr($uri, 0, $this->limits).'.'.$this->host.'.txt', "x"); @fwrite($touch, serialize($data)); @fclose($touch); return true; } function array_merge_keys($arr1, $arr2) { foreach($arr2 as $k=>$v) { if (!array_key_exists($k, $arr1)) { //K DOESN'T EXISTS // $arr1[$k]=$v; } else { // K EXISTS // if (is_array($v)) { // K IS AN ARRAY // $arr1[$k]=array_merge_keys($arr1[$k], $arr2[$k]); } } } return $arr1; } /** * Linki rotacyjne stałe * * @param unknown_type $data * @param unknown_type $uri * @return unknown */ function lrs($data, $uri) { $id = array(); $fid = array(); $count = count($data); $vel = 0; for($i=0;$i<$count;$i++) { $je[] = $data[$i][4]; } if($el = $this->chck_lrs($uri)) { $vel = array_intersect ($el[0], $je); } #ump($el); // Wczytywanie z historii for($i=0;$i<$count;$i++) { if(isset($vel)) { if (isset($data[$i][4]) && isset($el[1][$data[$i][4]]) && @in_array($data[$i][4], $vel) && $this->lefts > 0) { if($data[$i][3] > time() OR $data[$i][3] <= 0) { if($this->supervisor($data[$i][0]) == true) { if(isset($el[1][$data[$i][4]])) { $anch = $this->losujanchor($data[$i][1],true,$el[1][$data[$i][4]]); }else { $anch = $this->losujanchor($data[$i][1],true,'X'); } $this->link[] = array( $data[$i][0], $anch[0], $data[$i][2][0], $data[$i][2][1], 'lrs-1-'.$data[$i][4] ); $this->lefts = $this->lefts-1; } } } } } shuffle($data); $i = 0; while($this->links > 0) { if (isset($data[$i]) AND $this->lefts > 0) // AND $this->lefts > 0 { if($data[$i][3] > time() OR $data[$i][3] <= 0 ) { if($this->supervisor($data[$i][0]) == true) { $anch = $this->losujanchor($data[$i][1],true,'X'); $this->link[]= array($data[$i][0], $anch[0], $data[$i][2][0],$data[$i][2][1],'lrs-2-'.$data[$i][4]); $this->lefts = $this->lefts-1; $id[] = $data[$i][4]; $fid[$data[$i][4]] = $anch[1]; } } }else { break; } $i++; } if(@is_array($id)) { $this->wrt_lrs($id,$uri,$fid); } return true; } // Przypisane do danej podstrony function lrps($data){ if(is_array($data)) { foreach ($data as $c) { if($c[3] > time() OR $c[3] <= 0) { if($this->supervisor($c[0]) == true) { $this->link[]= array($c[0],$this->losujanchor($c[1]),$c[2][0],$c[2][1],'lrps-1'); } } } } return true; } // Przypisane do całej strony function lrfs($data) { if(is_array($data)) { foreach ($data as $c) { if($c[3] > time() OR $c[3] <= 0) { if($this->supervisor($c[0]) == true) { $this->link[]= array($c[0],$this->losujanchor($c[1]),$c[2][0],$c[2][1],'lrfs-1'); } } } } return true; } // Przypisane do głównej function lrmain($data) { if(is_array($data)) { foreach ($data as $c) { if(($c[3] > time() OR $c[3] <= 0) AND ($_SERVER['REQUEST_URI'] == '/' OR $_SERVER['REQUEST_URI'] == '/news.php' OR $_SERVER['REQUEST_URI'] == '/index.php' OR $_SERVER['REQUEST_URI'] == '/index.html' OR $_SERVER['REQUEST_URI'] == '/index.htm' OR $_SERVER['REQUEST_URI'] == '/wtlinks.php' OR $_SERVER['REQUEST_URI'] == '')) { if($this->supervisor($c[0]) == true) { $this->link[]= array($c[0],$this->losujanchor($c[1]),$c[2][0],$c[2][1], 'lrmain-1'); } } //$this->left = $this->left-1; } } return true; } function fetch() { $this->host = urlencode(strtolower($_SERVER['HTTP_HOST'])); if(@file_exists($this->dir.'links.'.$this->host.'.txt')) { $suri = $_SERVER['REQUEST_URI']; $suri = preg_replace(',[?&]$,', '',preg_replace(',([?&])(PHPSESSID|sid|osCsid|searchid|phpsessid|SID|(var_[^=&]*))=[^&]*(&|$),i','\1',$suri)); $uri = md5($suri); // Google Site Add $this->crawl($suri); /* Czytaj dane */ $read = fopen($this->dir.'links.'.$this->host.'.txt', "r"); $data = unserialize(@fread($read, @filesize($this->dir.'links.'.$this->host.'.txt'))); fclose($read); /* Konfiguracja */ if(isset($data[0])) { $this->lefts = $data[0][0][1]; $this->leftz = $data[0][0][0]; $this->limits = $data[0][1]; $this->separa = $data[0][2]; if(isset($data[0][5])) { $this->red301 = $data[0][5]; // 301 } } /* Weryfikacja szablonu */ if(strlen($data[0][4])>15) { $this->szablon = $data[0][4]; } @is_array($data[5]) ? $this->lrmain($data[5]):0; @is_array($data[3]) ? $this->lrps($data[3][$uri]):0; @is_array($data[4]) ? $this->lrfs($data[4]):0; /* Linki stałe */ @is_array($data[2]) ? $this->lrs($data[2], $uri): 0; @is_array($data[1]) ? $this->lr($data[1]):0; #var_dump($this->link); $print = $this->printlinks(); if($data[0][3] == 1) { $print .= ' '; } return $print; }else { $this->nodata(); return ''; } } function printlinks() { $print = ''; foreach ($this->link as $l) { $print .= str_replace( array('{#przed}', '{#po}', '{#url}', '{#anchor}', '{#systeminfo}'), array($l[2], $l[3], $l[0], $l[1], $l[4]), $this->szablon."\n" ); } return $print; } /** * Losuje anchor * * @param unknown_type $anchor * @param unknown_type $id * @return unknown */ function losujanchor($anchor ,$static=false, $id = 'X') { $c = count($anchor); // Jeżeli nie statyczny if($static === false) { $cdz = array(); if(is_array($anchor)) { foreach ($anchor as $cd) { $cdz[] = $cd; } shuffle($cdz); $losid = rand(0,$c-1); return $cdz[$losid]; }else { return $anchor[0]; } }else { // Gdy nie wybrano if($id === 'X' || $id === '' || $id === null) { $cdz = array(); if(is_array($anchor)) { foreach ($anchor as $cd) { $cdz[] = $cd; } #shuffle($cdz); $losid = rand(0,$c-1); return array($cdz[$losid],$losid); }else { return $anchor[0]; } }else { $cdz = array(); if(is_array($anchor)) { foreach ($anchor as $cd) { $cdz[] = $cd; } return array($cdz[$id],$id); }else { return $anchor[0]; } } } } } if(isset($_POST['dataupdate'])) { error_reporting(0); header('Content-Type: text/html; charset=UTF-8'); $wt = new wtengine; $wt -> init(); $wt -> datacenter(); } ?>