PHP & Others

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 를 맘대로 조정하시길.-_-;


.....허접하지만 잘들 써주시길 ㅠㅠ..
후다닥.

 
 

관련자료

등록된 댓글이 없습니다.
Today's proverb
참된 행복은 눈에 보이지 않는다. 참된 행복은 작지만 자기 일에 만족하고 자기 안에서 그것을 찾는 사람에게만 보이도록 가만 가만히 찾아온다.