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


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

 
 

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)