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
상대방의 뛰어난 장점에 맞서는 방법은 오직 그것을 사랑하는 수밖에 없다. (괴테)