서버운영 시 백업은 정말 중요하다. 최소 일주일치는 어디에든 백업이 되어 있어야 한다. 백업하지 않고 배짱부리다가는 언젠가는 땅을 치고 후회한다.
나는 셀 스크립트를 이용해 필요한 자료를 매일 새벽 서버의 특정 디렉토리에 압축해서 저장한 다음 오전 9시 내 컴퓨터로 내려받는다.
보통 며칠 분량을 서버에 저장해 두지만, 나는 당일 내 컴퓨터로 내려받은 후 다음 백업에 지워 버리도록 했다.
그리고 MySQL은 mysqldump를 이용해서 백업 하지 않고, 데이터 디렉토리 전체를 백업하도록 했다.
서버의 백업 파일을 내 컴퓨터로 내려받을 때에는 "Cobian Backup" 프로그램을 이용한다. "Cobian Backup" 사용법은 이전에 포스팅 한 적이 있으므로 참고하기 바란다.
먼저 최상위 디렉토리에 "back_up" 디렉토리를 생성하고 사용자를 등록한 다음 passwd 파일에 사용자의 홈 디렉토리를 "back_up"으로 지정한다. 백업 전용 계정이므로 보안상 SSH 접속은 막는다. 그리고 다른 디렉토리로 이동을 하지 못하도록 운영하고 있는 FTP에 맞게 설정한다.
그리고 /root 디렉토리 아래에 crond 디렉토리를 만들고 아래의 스크립터로 back_up.sh을 생성한다. root만 실행하도록 권한은 700으로 지정한다.
export Today="`date '+%y-%m-%d'`"
backup_dir="/back_up/BackUP"
################ 이전 백업 디렉토리 삭제
LDATE=$(date -d yesterday +%y-%m-%d)
rm -rf ${backup_dir}/$LDATE
################ 오늘 날짜로 백업 디렉토리 생성
/bin/mkdir -p ${backup_dir}/$Today
cd ${backup_dir}/$Today
################ /home 디렉토리를 계정별로 압축
dirlists=`/bin/ls -t /home 2>/dev/null`
for dir in $dirlists ; do
tar cvfpz ${backup_dir}/$Today/$dir.tar.gz /home/$dir
done
################ etc 디렉토리를 압축
tar cvfpz ${backup_dir}/$Today/etc.tar.gz /etc
################ named 디렉토리 압축
tar cvfpz ${backup_dir}/$Today/var.named.tar.gz /var/named
################ MySQL 데이터 압축
tar cvfpz ${backup_dir}/$Today/mysql.tar.gz /var/lib/mysql
매일 새벽 4시 10분에 'ROOT'가 실행하도록 crontab에 등록
10 04 * * * root /root/crond/back_up.sh > /dev/null 2>&1
하루 치만 백업하다보니 간혹 내가 컴퓨터를 켜지 않아 백업이 누락되는 현상이 있다. 5일 치 정도는 서버에 저장하여 내 컴퓨터로 백업을 받지 못했을때 수동으로 백업 받을 수 있도록 궁리를 해봐야겠다.
추가 - 서버에 5일 치 백업 본을 저장
내 컴퓨터가 켜 지지 않아 백업을 받을 수 없는 경우를 대비해서 5일 치 백업을 서버에 저장해 두고 필요에 따라 수동으로 백업 받도록 설정함.
5일 이상 컴퓨터를 켜지 않는 경우는 없으니, 5일 치만 저장해도 충분할 듯.
#!/bin/bash
export Today="`date '+%y-%m-%d'`"
backup_dir="/back_up/BackUP"
################ 5일 치 백업 파일을 저장할 디렉토리
old_backup="/back_up/Old_BackUP"
################ 어제 날짜를 구하고
LDATE=$(date -d yesterday +%y-%m-%d)
################ 저장한지 5일이 지난 백업은 찾아서 삭제
find ${old_backup} -ctime +5 -exec rm -rf {} ;
################ 어제 백업은 보관할 디렉토리로 이동
mv ${backup_dir}/$LDATE ${old_backup}
################ 오늘 날짜로 백업 디렉토리 생성
/bin/mkdir -p ${backup_dir}/$Today
cd ${backup_dir}/$Today
################ /home 디렉토리를 계정별로 압축
dirlists=`/bin/ls -t /home 2>/dev/null`
for dir in $dirlists ; do
tar cvfpz ${backup_dir}/$Today/$dir.tar.gz /home/$dir
done
################ etc 디렉토리를 압축
tar cvfpz ${backup_dir}/$Today/etc.tar.gz /etc
################ named 디렉토리 압축
tar cvfpz ${backup_dir}/$Today/var.named.tar.gz /var/named
################ MySQL 데이터 압축
tar cvfpz ${backup_dir}/$Today/mysql.tar.gz /var/lib/mysql
'Tip & Tech > Linux' 카테고리의 다른 글
SSL 인증서 무료로 받아 설치하기 (29) | 2012.08.23 |
---|---|
해킹방지 - 특정 폴더에서 PHP 실행방지 (3) | 2012.06.19 |
MySQL Database 백업 (스키마) (0) | 2010.08.04 |
MySQL Database 백업 (스키마+데이터) (0) | 2010.08.04 |
Change or Set the MySQL Root password (0) | 2010.08.04 |
댓글5