|  | 
		
			|  | 
		
			|  | 
		
			| 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"); | 
		
			| ############################################################################## |