'2006/11/09'에 해당되는 글 2건

  1. 2006.11.09 :: 심심해서 짜본 증분백업 스크립트 3
  2. 2006.11.09 :: 음.. 심심해서 짜본 백업스크립트
Language 2006. 11. 9. 05:46
내가 미친게지-_-;;
새벽에 할 일 없어서 perl로 백업스크립트 짜더니..
이젠 php로 증분백업을 (...) 미친게야....

#!/usr/bin/php

<?php
// 제외할 목록 함수
function noUser($id){
switch ($id){
case "lost+found" :
case "test" : return false; break;
default : return true;
}
}

$oneDay=86400; //60*60*24초
$tmpTime=time();

$nYear=date("Y",$tmpTime);
$nMonth=date("m",$tmpTime);
$nDay=date("d",$tmpTime);

$nTime=mktime(0, 0, 0, $nMonth, $nDay, $nYear);
$nWeek=date("D",$nTime);

// 전체 백업 날짜가 바뀌면 아래 $allBackupDay 의 요일과 switch 문의 x 값을 바꺼준다.
// x 값은 전체 백업요일는 7 그 다음요일은 1 그다음은 2 .... 식으로하며 전체 백업요일 전은 6이다.
// 예를 들어 전체 백업날이 월요일이면 다음과 같다.
// Mon:7, Tue:1, Wed:2, Thu:3, Fri:4, Sat:5, Sun:6
$allBackupDay="Mon";
switch($nWeek){
case "Mon" : $x=7; break;
case "Tue" : $x=1; break;
case "Wed" : $x=2; break;
case "Thu" : $x=3; break;
case "Fri" : $x=4; break;
case "Sat" : $x=5; break;
case "Sun" : $x=6; break;
}

// 전주 일요일 날자 구함, 지워질 날짜 구함
$tTime=$nTime-($oneDay*$x);
$delTime=$tTime-($oneDay*7);
$tWeek=date("D",$tTime);

// 오늘이 일요일이면 오늘 날짜를, 아니면 전주 일요일 날짜를
if($nWeek==$allBackupDay) $backup_dir=date("Y-m-d",$nTime);
else $backup_dir=date("Y-m-d",$tTime);

$backup_root="/backup/"; // 백업 폴더
$backup_dir2=date("m-d",$nTime); // 2차 백업 폴더
$list_root="/sys/crond/list/"; // 리스트 관리 폴더
$delete_dir=date("Y-m-d",$delTime); // 삭제할 날짜 폴더

// /backup/2004-01-01/01-01/ 생성
// home백업 디렉토리 생성
// db백업 디렉토리 생성
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/home");
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/db");
if(!file_exists($list_root)) exec("mkdir -p ".$list_root);

if($nWeek==$allBackupDay){ // 전체 백업 날짜이면 디렉토리 생성
exec("rm -rf ".$backup_root.$delete_dir); // 2주전 데이터 삭제
exec("rm -f ".$list_root."*"); // 리스트 삭제
}

//시작 측정 시작
$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/start-$time");

/********************* 매일 실행 될 부분 시작 *********************/

// 유저리스트 불러옴
exec("ls /home > ".$list_root."user_list");
$userList=file($list_root."user_list");
for($i=0;$i<count($userList);$i++) $userList[$i]=trim(str_replace("\n","",$userList[$i]));
exec("rm -f ".$list_root."user_list");

// 디비 리스트 불러옴
// 파일의 내용을 한줄씩 읽어서 배열로 저장
// 줄바꿈표시와 좌우 여백 삭제
// 디비리스트 삭제
// 디비 저장
exec("ls /db > ".$list_root."db_list");
$dbList=file($list_root."db_list");
for($i=0;$i<count($dbList);$i++) $dbList[$i]=trim(str_replace("\n","",$dbList[$i]));
exec("rm -f ".$list_root."db_list");
for($i=0;$i<count($dbList);$i++){
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/db/".$dbList[$i].".tar.gz /db/".$dbList[$i]." 2>/dev/null");
}

exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/usr.local.tar.gz /usr/local 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/etc.tar.gz /etc 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/var.tar.gz /var 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/sys.tar.gz /sys 2>/dev/null");

/********************* 매일 실행 될 부분 끝 ***********************/

for($i=0;$i<count($userList);$i++){
if(noUser($userList[$i])){
exec("tar -g ".$list_root.$userList[$i]." -cvpzf ".$backup_root.$backup_dir."/".$backup_dir2."/home/".$userList[$i].".tar.gz /home/".$userList[$i]." 2>/dev/null");
}
}

exec("chmod -R 600 ".$backup_root.$backup_dir);

$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/end-$time");
?>
posted by 티니
:
Language 2006. 11. 9. 02:32

그냥 새벽에 할 일도 없고, 심심해서 perl로 백업스크립트를 짜봤다.
다 짜놓고 보니.. 또 심심하군....-_-;

#!/usr/bin/perl

# 경로지정
$remove_date = "3";
$path = "/backup";
$backup_dir1 = "$path/sys_db";
$backup_dir2 = "$path/home_data";

# 백업하지 않을 디렉토리
$no_backup{"lost+found"}=1;
$no_backup{"test"}=1;

# 날짜 구하기
($day, $month, $year) = (localtime)[3,4,5];
$year = $year+1900;
$month = $month+1;
$date_dir = $year."-".$month."-".$day;
($D,$M,$Y) = (localtime(time - ($remove_date * 60 * 60 * 24)))[3,4,5];
$M++; $Y+=1900;
$old_date_dir = "$Y-$M-$D";

# Mount
system("mount /dev/sda1 $backup_dir1");
system("mount /dev/sdb2 $backup_dir2");
system("chattr -R -i $path");

# 지난 데이터 삭제
system("rm -rf $backup_dir1/$old_date_dir");
system("rm -rf $backup_dir2/$old_date_dir");

# 날짜에 맞는 디렉토리를 생성
system("mkdir -p $backup_dir1/$date_dir/db");
system("mkdir -p $backup_dir2/$date_dir");

# 시스템 디렉토리 백업
system("tar cfpz $backup_dir1/$date_dir/usr.local.tar.gz /usr/local 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/etc.tar.gz /etc 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/var.tar.gz /var 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/sys.tar.gz /sys 2>/dev/null");

# DB를 사용자별로 백업
system("ls /var/lib/mysql > /sys/crond/db_list");
open(FILES,"/sys/crond/db_list");
@array = <FILES>;
system("rm -f /sys/crond/db_list");
foreach $d_list(@array){
chomp($d_list);
  system("tar cfpz $backup_dir1/$date_dir/db/$d_list.tar.gz /var/lib/mysql/$d_list 2>/dev/null");
}

# 홈데이터를 사용자별로 백업
system("ls /home > /sys/crond/ho_list");
open(FILES,"/sys/crond/ho_list");
@array = <FILES>;
system("rm -f /sys/crond/ho_list");
foreach $h_list(@array){
chomp($h_list);
next if $no_backup{$h_list};
system("tar cfpz $backup_dir2/$date_dir/$h_list.tar.gz /home/$h_list 2>/dev/null");
}

# 보안을 위해 퍼미션 조정
system("chmod -R 600 $backup_dir1 $backup_dir2");

#UnMount
system("chattr -R +i $path");
system("umount /dev/sdb1");
system("umount /dev/sdb2");

posted by 티니
: