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