PHP를 이용한 서버 백업
컨텐츠 정보
- 17,526 조회
- 3 추천
- 목록
본문
안녕하세요.
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를 이용하여 서버 백업 프로그램을 짜봤습니다.
부족하긴 하지만, 사용하시는데는 큰 무리는 없을 듯 싶습니다.
그럼 소스 나갑니다~>
-------
#!/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
등록된 댓글이 없습니다.