|
|
|
1) 홈백업 스크립트 사용 방법 |
- 아래 스크립트 중 수정할 부분을 서버설정에 맞도록 수정한다.(수정해야 할 부분에 밑줄로 표시해 두었음) |
- 저장 후 실행권한(chmod 700 server_full_backup.pl)을 준다. |
- crontab에 저장 후 원하는 시간에 실행되도록 설정한다. |
|
2) 홈백업 스크립트의 특징 |
- 각 계정별로 백업 실행(홈 전체를 rsync 실행 시 부하가 발생하기 때문) |
- 환경이 다른 시스템에 적용해도 간단하게 수정 가능 |
- 백업이 완료되면 백업 완료된 시점으로 백업 프로세스 로그 저장 |
|
############# Home full backup ############# |
#!/usr/bin/perl |
|
$date_time = `date +%Y%m%d%H%M`; |
chomp($date_time); |
$server = `hostname`; |
chomp($server); |
|
############## 수정할 부분 ################ |
$backup_server_ip = "백업서버 아이피 지정"; |
$backup_server_dir = "백업서버 데이터 저장 디렉터리 지정"; |
|
@backup_dir_list = qw(/home); # 백업받을 디렉터리 지정 |
|
@no_backup_dir_list = qw(. .. lost+found log logs); # 백업받지 않을 디렉터리 지정 |
########################################### |
open(BACKUP_CHECK, "> /tmp/$server.txt"); |
print BACKUP_CHECK "$date_time\n"; |
foreach $backup_dir (@backup_dir_list) { |
chomp($backup_dir); |
|
if(-d $backup_dir) { |
foreach $df (`df -h`) { |
chomp($df); |
@df_list = split(' ', $df); |
if($df_list[5] eq "$backup_dir") { |
print BACKUP_CHECK "$backup_dir\t$df_list[2]\n"; |
} |
} |
|
opendir(BACKUP_DIR, "$backup_dir"); |
while($bak_dir = readdir(BACKUP_DIR)) { |
chomp($bak_dir); |
$no_backup_check = 0; |
|
foreach $no_backup_dir (@no_backup_dir_list) { |
chomp($no_backup_dir); |
if($no_backup_dir eq $bak_dir) { |
$no_backup_check = 1; |
} |
} |
if($no_backup_check == 0) { |
`rsync -zavg --delete $backup_dir/$bak_dir $backup_server_ip\::$backup_server_dir/$server`; |
} |
} |
close BACKUP_DIR; |
} |
else { |
print BACKUP_CHECK "$backup_dir\t디렉터리 없음!\n"; |
} |
} |
print BACKUP_CHECK "$date_time\n"; |
close BACKUP_CHECK; |
|
`rsync -zavg /tmp/$server.txt $backup_server_ip\::$backup_server_dir/`; |
|
unlink("/tmp/$server.txt"); |
############################################################## |
|
|
|
1) DB 및 conf 백업 스크립트 사용 방법 |
- 아래 스크립트 중 수정할 부분을 서버설정에 맞도록 수정한다 |
- 저장 후 실행권한(chmod 700 server_conf_backup.pl)을 준다. |
- crontab에 저장 후 원하는 시간에 실행되도록 설정한다. |
|
2) DB 및 conf 백업 스크립트의 특징 |
- 백업된 데이터는 7일 후 자동 삭제됨. |
- 환경이 다른 시스템에 적용해도 간단하게 수정 가능. |
- 백업이 완료되면 백업 완료된 시점으로 백업 프로세스 로그 저장. |
|
############# Mysql, conf backup ############## |
|
######### 현재 날짜를 구한다. ########### |
$date = `date +%Y%m%d`; |
chomp($date); |
|
$server = `hostname`; # 서버명 자동 추출 |
chomp($server); |
|
$tmp_dir = "임시 저장될 디렉터리 지정"; |
$mysql_root_pw = "DB 루트 암호"; |
$mysql_daemon = "/usr/local/mysql/bin"; # mysql 데몬 위치 지정 |
$mysql_data = &mysql_datadir; # 함수 이용(MySQL data 디렉터리 추출) |
|
$error_check = 0; |
|
############ 관리자 설정 사항 ########### |
$admin_email = "master\@abc.com"; # 관리자 이메일 |
$backup_server_ip_1st = "1차 백업 아이피 지정"; # 1차 백업 |
$backup_server_dir_1st = "1차 백업 디렉터리 지정"; |
$backup_server_ip_2st = "2차 백업 아이피 지정"; # 2차 백업 |
$backup_server_dir_2st = "2차 백업 디렉터리 지정"; |
|
$backup_list = "/usr/local/apache/conf /etc"; # 백업받을 목록 지정 |
######################################### |
|
open(ERRORMAIL, "> /tmp/conf_backup_error_mail.txt"); |
print ERRORMAIL "$server 서버 환경 파일 백업에 실패하였습니다.\n\n"; |
|
if(-e "/etc/cron/backup_system/server_conf_backup/backup_server_ip.txt") { |
open(BACKUPIPFILE, "/etc/cron/backup_system/server_conf_backup/backup_server_ip.txt"); |
$old_backup = < BACKUPIPFILE >; |
chomp($old_backup); |
close BACKUPIPFILE; |
|
if($old_backup eq $backup_server_ip_1st) { |
$backup_server_ip = $backup_server_ip_2st; |
} |
else { |
$backup_server_ip = $backup_server_ip_1st; |
} |
} |
else { |
$backup_server_ip = $backup_server_ip_1st; |
} |
|
if($backup_server_ip eq $backup_server_ip_1st) { |
$backup_server_dir = $backup_server_dir_1st; |
} |
elsif($backup_server_ip eq $backup_server_ip_2st) { |
$backup_server_dir = $backup_server_dir_2st; |
} |
|
if(-d "$tmp_dir") { |
; |
} |
else { |
mkdir("$tmp_dir", 0700); |
} |
|
`rm -Rf $tmp_dir/mysql`; # MySQL 백업 받기 전 저장될 디렉터리 초기화 |
`rm -Rf $tmp_dir/conf`; # 환경 설정 파일 저장될 디렉터리 초기화 |
mkdir("$tmp_dir/mysql", 0700); # MySQL 디렉터리 생성 |
mkdir("$tmp_dir/conf", 0700); # 환경설정 디렉터리 생성 |
|
if(-d "$mysql_data") { |
`tar -zcvpf $tmp_dir/mysql/$server\_mysql_$date\.tgz $mysql_data`; # MySQL 자료 압축 |
} |
else { |
print ERRORMAIL "MySQL 백업에 실패하였습니다.\n압축에 실패하였습니다.\n"; |
$error_check = 1; |
} |
} |
else { |
print ERRORMAIL "MySQL Data 디렉터리를 찾지 못하였습니다.\n"; |
$error_check = 1; |
} |
|
############ 환경 설정 파일 압축하여 백업 서버로 이동 ############ |
|
`repquota -a > $tmp_dir/conf/quota.txt`; # Quota 조사 |
|
`tar -zcvpf $tmp_dir/conf/$server\_conf_$date\.tgz $backup_list`; |
|
if(-e "$tmp_dir/conf/$server\_conf_$date\.tgz") { |
`rsync -zavg $tmp_dir/conf/$server\_conf_$date\.tgz $backup_server_ip\::$backup_server_dir/server_conf_backup`; |
} |
else { |
print ERRORMAIL "CONF 파일 백업에 실패하였습니다.\n압축에 실패하였습니다.\n"; |
$error_check = 1; |
} |
close ERRORMAIL; |
|
open(NEWBACKUPIPFILE, "> /etc/cron/backup_system/server_conf_backup/backup_server_ip.txt"); |
print NEWBACKUPIPFILE "$backup_server_ip"; |
close NEWBACKUPIPFILE; |
|
if($error_check == 1) { |
`mail -s "[긴급] $server 환경 설정 백업 실패" $admin_email < /tmp/conf_backup_error_mail.txt`; |
} |
|
unlink("/tmp/conf_backup_error_mail.txt"); |
############################################################################## |