사이트 내 전체검색
PHP
[php] PHP를 이용한 서버 백업
로빈아빠
https://cmd.kr/php/445 URL이 복사되었습니다.

본문

PHP를 이용한 서버 백업

php를 이용하여 서버 백업 프로그램을 짜봤습니다.
부족하긴 하지만, 사용하시는데는 큰 무리는 없을 듯 싶습니다.

그럼 소스 나갑니다~>
#!/usr/bin/php -q       
<? 
        // 서버 백업 자동화 프로그램 
        // 2002.05.24 
        // made by byja3n 

         
        // 함수 선언 
         
        function makeCmd($dir,$name, $Sdir) { 
                for ($i = 0; $i < sizeof($dir); $i++) { 
                        $tempCmd[] = "tar -zcpf " . $Sdir . "/" . $name[$i] ."_" . date('Ymd') . ".tgz -C " .$dir[$i] . " ./" ; 
                } 
                return $tempCmd; 
        } 
         
        // 변수선언 
         
        $aliveDataTime = 86400*5;       // 86400초는 1일 해서 5일 이전의 데이터는 삭제한다. 
        $today = getdate(time()-$aliveDataTime); 
        $DDay = $today[year] . sprintf("%02d", $today[mon]) . sprintf("%02d", $today[mday]); 

        $Sdir = '/var/backup/' . date(Ymd); // 백업이 저장될 디렉토리                       
        $Ddir = '/var/backup/' . $DDay; // 백업이 삭제될 디렉토리 
                 
        // 백업을 할 곳 (배열) 
        // 홈디렉토리는 데이터가 너무 크므로, 각 디렉토리 별로 저장한다. 
        // 홈디렉토리에 포함되는 것들 : 홈페이지, 이메일 데이터 
        $cmd = 'ls -1 /home'; 
        $fp = popen($cmd, 'r'); 
        while(!feof($fp)) { 
        $buff = fgets($fp, 1024); 
         
                $buff = ereg_replace("\r","", trim($buff)); 

                if ($buff) { 
                        $Tdir[] = "/home/" . $buff; 
                        $TdirName[] = $buff; 
                } 
        }       
                         
        $Tdir[] = '/etc'; 
        $TdirName[] = 'etc'; 
        $Tdir[] = '/var/lib/mysql'; 
        $TdirName[] = 'mysql'; 

         
        // 데이터 백업 시작 
        // 1. 먼저 백업 디렉토리를 생성한다. 
        // 2. 데이터 백업 
        // 3. 예전 백업 디렉토리 삭제. 

        $CMD = "mkdir " . $Sdir; 
        echo $CMD . "\n"; 
        system($CMD); 
         
        $CMD = makeCmd($Tdir, $TdirName, $Sdir); 
         
        for ($i = 0; $i < sizeof($CMD); $i++) { 
                echo $CMD[$i] . "\n"; 
                system($CMD[$i]); 
        } 

        //예전 데이터 삭제 

        $CMD = "rm -rf " . $Ddir; 
        echo $CMD . "\n"; 

        system($CMD); 

        pclose($fp); 
?> 


일단 소스를 보시면 아시겠지만, /home디렉토리는 용량이 너무커서,
각 디렉토리별로 백업하게 해두었습니다.
CD 한장에 들어가게하기도 하고, 각각 따로 뽑아 쓸데도 편하거든요. =)

$Tdir[] 배열은 백업 받아야 할 곳의 디렉토리 목록이고
$TdirName[] 배열은 백업 받을 디렉토리의 정해질 파일 이름입니다.

이 두 부분을 알맞게 정하시면
특정 디렉토리를 백업하실 수 있게 됩니다.

일단 /etc/, DB, /home 디렉토리를 백업하는 것으로 작업은 해두었습니다.

흠...버그라기는 좀 그렇고, 백업 받아야 할곳의 디렉토리 안에..
백업 데이터 저장할곳을 정해버리면 곤란하겠죠? ^^? 그런 불상사가 없길;;

한가지더.. $aliveDataTime는 백업 데이터를 몇일간 보관할 것인가에 대한것입니다.
86400은 가만 두시고.. *5 를 맘대로 조정하시길.-_-;

댓글목록

등록된 댓글이 없습니다.

PHP
871 (11/18P)

Search

Copyright © Cmd 명령어 18.226.214.91