[php] PHP를 이용한 서버 백업
로빈아빠
본문
PHP를 이용한 서버 백업
php를 이용하여 서버 백업 프로그램을 짜봤습니다.
부족하긴 하지만, 사용하시는데는 큰 무리는 없을 듯 싶습니다.
그럼 소스 나갑니다~>
일단 소스를 보시면 아시겠지만, /home디렉토리는 용량이 너무커서,
각 디렉토리별로 백업하게 해두었습니다.
CD 한장에 들어가게하기도 하고, 각각 따로 뽑아 쓸데도 편하거든요. =)
$Tdir[] 배열은 백업 받아야 할 곳의 디렉토리 목록이고
$TdirName[] 배열은 백업 받을 디렉토리의 정해질 파일 이름입니다.
이 두 부분을 알맞게 정하시면
특정 디렉토리를 백업하실 수 있게 됩니다.
일단 /etc/, DB, /home 디렉토리를 백업하는 것으로 작업은 해두었습니다.
흠...버그라기는 좀 그렇고, 백업 받아야 할곳의 디렉토리 안에..
백업 데이터 저장할곳을 정해버리면 곤란하겠죠? ^^? 그런 불상사가 없길;;
한가지더.. $aliveDataTime는 백업 데이터를 몇일간 보관할 것인가에 대한것입니다.
86400은 가만 두시고.. *5 를 맘대로 조정하시길.-_-;
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 를 맘대로 조정하시길.-_-;
관련링크
댓글목록
등록된 댓글이 없습니다.