BLOG ARTICLE crontab | 1 ARTICLE FOUND

  1. 2007/09/25 cron 으로 백업하기 (10)

cron 으로 백업하기

Linux 2007/09/25 14:05
 
 
 
 

cron은 crond 라는 리눅스 데몬의 한 종류이다. 정기적으로 필요한 작업을 예약해 놓고 실행시키는 데몬인 것이다. at 데몬이 미래의 어떤 특정한 시점에 실행되는 1회성 예약작업인데 반해서, cron 데몬은 정해진 시간이 되면 정기적으로 반복해서 작업을 수행한다. 따라서 cron 데몬은 정기적인 백업, 매주 월요일마다 메일을 보내야할 때, 매월 1일 공지사항을 띄우고 싶거나 할 때 사용할 수 있다.

우선 cron 데몬이 부팅할 때 자동으로 실행되게 되어 있는지 알아보고, 자동 실행이 되어있지 않다면 자동으로 실행되도록 지정하고 현재 cron 데몬을 실행시켜 놓는다.

[root@mail search]# chkconfig --list crond
crond           0:해제  1:해제  2:활성  3:해제  4:활성  5:해제  6:해제
[root@mail search]#
[root@mail search]# chkconfig --level 35 crond on
[root@mail search]#
[root@mail search]# chkconfig --list crond
crond           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제
[root@mail search]#
[root@mail search]# service crond start
Starting crond: [  OK  ]


cron 데몬에 작업을 부여하기 위해서 -e 옵션을 그리고 등록된 작업을 볼 때는 -l 옵션을 사용한다.

0 0 * * * mysqldump -uroot -p***** MyDB > MyDB-backup_$(date +%Y%m%d).sql
0 13 * * 0 tar cvfz back_$(date +%Y%m%d).tar.gz /home/aaaa/backup
0 14 * * 0 find /home/aaaa/backup  -ctime +2 -exec rm -rf {} \;

위 작업내용을 풀이 하면 아래와 같다:
첫번째 줄은 매일 0시 0분에  MySQL MyDB라는 DB를 MyDB-backup_날짜.sql 로 백업한다.
두번째 줄은 /home/aaaa/backup 폴더의 내용을 back_날짜.tar.gz 라는 파일로 압축 백업한다.
세번째 줄은 /home/aaaa/backup 폴더의 내용중 이틀이상된 파일을 찾아 삭제한다.




[원격 백업서버 만들기]

먼저, 각각의 클라이언트에서 자료를 백업하고, 일정주기에 따라 백업서버에서 클라이언트로 부터 자료를 가져다 백업한다.
이 방법은 Cron을 이용해 주기적으로 스크립트를 실행시키도록하였으며, ncftp클라이언트 유틸을 이용해서
자료를 옮기도록 하고, Gzip을 이용해 tar파일로 자료를 압축하였다.
(주의!여기서 소개하는 것은 본인이 테스트용으로 만들어본 것이므로 실제 서버에 이용하는 일이 없도록 한다.)

+ System Enviroment
: 백업서버 s1, 클라이언트 s2,s3,s4

1. 클라이언트 자료백업하기.
다음은 각각의 클라이언트에서 수행되는 스크립트 파일들이며, 백업하는 내용이 같다고 가정했을 때 이다.
(s2,s3,s4에서 수행되는 스크립트파일)

# vi s2_conf
// 다음 스크립트는 중요설정 파일들(/etc...)을 포함해 백업하도록하는 파일이다.

#!/bin/bash

find /backup/backup_s2/* -mtime +7 -exec rm -f {} \; //변경된지 7일이 지난것을 삭제한다.
etc=/backup/backup_s2/s2_etc_$(date +%Y-%m-%d).tar.gz //현재날짜를 포함하여 압축파일을 생성한다.
mysql=/backup/backup_s2/s2_mysql_$(date +%Y-%m-%d).tar.gz
apache=/backup/backup_s2/s2_apache_$(date +%Y-%m-%d).tar.gz
var1=/backup/backup_s2/s2_named_$(date +%Y-%m-%d).tar.gz
var2=/backup/backup_s2/s2_spool_$(date +%Y-%m-%d).tar.gz
tar cvfzp $etc /etc //실제압축하는 부분임.
tar cvfzp $mysql /usr/local/mysql/var
tar cvfzp $apache /usr/local/apache/conf
tar cvfzp $var1 /var/named
tar cvfzp $var2 /var/spool
chmod 700 *.tar.gz
echo `date +"%d-%m-%Y"` > DATE //작업한 날짜를 기록한다.나중에 증가분에 대한 백업을 할때에 사용된다.
chown backup.backup * //ncftp로 자료를 옮길 때에 사용될 계정사용자의 소유권으로 변경시킨다.
ls -alh | mail -s s2_백업완료_backup_dir_info admin at manpage.biz



다음은 비교적 용량이 큰 자료들을 백업할 때에 사용되는 스크립트의 예제이다.

# vi s2_data

#!/bin/bash

cd /backup/backup_s2_2
find /backup/backup_s2_2/* -mtime +7 -exec rm -rf {} \;
home1=/backup/backup_s2_2/s2_home1_$(date +%Y-%m-%d).tar.gz
home2=/backup/backup_s2_2/s2_home2_$(date +%Y-%m-%d).tar.gz
home3=/backup/backup_s2_2/s2_home3_$(date +%Y-%m-%d).tar.gz
db1=/backup/backup_s2_2/s2_db1_$(date +%Y-%m-%d).tar.gz
db2=/backup/backup_s2_2/s2_db2_$(date +%Y-%m-%d).tar.gz
db3=/backup/backup_s2_2/s2_db3_$(date +%Y-%m-%d).tar.gz
logs=/backup/backup_s2_2/s2_LOGS_$(date +%Y-%m-%d).tar.gz
home_etc=/backup/backup_s2_2/s2_home_etc_$(date +%Y-%m-%d).tar.gz
tar cvfzp $home1 /home/www/[a-h]*
tar cvfzp $home2 /home/www/[i-o]* //해당 알파벳에 속하는 것만 압축하도록 한다.
tar cvfzp $home3 /home/www/[p-z]*
tar cvfzp $db1 /db/[a-h]*
tar cvfzp $db2 /db/[i-q]*
tar cvfzp $db3 /db/[r-z]*
tar cvfzp $logs /logs
tar cvfzp $home_etc /home/www2/* --exclude=/home/www2/olddata --exclude=/home/www2/lastdata
echo `date +"%d-%m-%Y"` > DATE
chmod 700 *.tar.gz
chown backup.backup *
ls -alh | mail -s s2_백업완료_dir_info admin at manpage.biz


위 와같이 각 클라이언트에 스크립트를 만들어 일정시간에 작업이 수행되도록한다.

# crontab -e
(분)(시)(날짜)(달)(요일)



2. 백업서버에서 클라이언트자료 백업하기.
다음은 백업서버에서 실행되어지는 스크립트파일이다.

# vi get_data
기존에 있던 백업파일을 지우고 새로운 백업파일을 복사해 옴니다.
#!/bin/bash

cd /backup/bakup_s2_2/DATA_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s2_2/*'
cd /backup/bakup_s3_2/DATA_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s3_2/*'
cd /backup/bakup_s4_2/DATA_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s4_2/*'
cd /backup/bakup_s2/CONF_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s2/*'
cd /backup/bakup_s3/CONF_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s3/*'
cd /backup/bakup_s4/CONF_FILE
rm -rf *.tar.gz
ncftpget -u bakup -p 'usrpass' 210.xxx.xx.xxx . 'backup_s4/*'

echo "원격데이터백업완료!!" | mail -s REMOTE_DATA_backup admin at manpage.biz



CRON 설정시 먼저 클라이언트의 백업이 완료된 후에 서버에서 클라이언트에 접속해 자료를 다운받아 오도록
시간을 설정해야 하며, 되도록 시간대는 새벽으로 하는 것이 좋다.

위 예제는 가장간단한 방법으로 이러한 형태로 백업이 가능하다라는 것을 보여주는 것이다.
돈이 많다면 고가의 백업장비를 사용하면 좋겠지만, 그렇지 못한 곳에서는 이런식의 방법을 이용해 보는것도
괜찮을 것 같다.
그리고 반듯이 오프라인 저장매체에 또한번 저장하는 것도 확실한 백업의 방법이 될수 있을 것이다.