NEW Nmail PHP 3 업그레이드 할인
자세히 보기

Nmail PHP TIP

FTP를 이용하여 외부 Windows에 백업하기!

양*안 2007.02.15 17:52 조회 22066

[시스템 구성]
- 메일서버 : Fedora core 6
- 백업서버 : Winodws 2003 server + IIS(FTP)

[작업 개요]
메일서버에서 외부 Windows서버에 FTP로 접속하여 백업파일을 업로드 하는 방식

1. 외부 Winodws 서버에 IIS설치 및 FTP 설정
주의) FTP 설정시 보안을 위해 따로 계정을 만드시고 FTP 폴더 생성 및 접속 권한을 설정
2. 메일서버에 FTP 설정
설치 설명서의 백업 스크립트를 수정하고 별도 FTP 백업 스크립트 작성
3. crontab 에 등록하여 정기적으로 백업받기

[작업 내용]
1. Windows에 IIS는 Server 제품군이나 XP Pro 버전 이상이면 설치가능하고 설정 방법도 간단하니
설명을 생략하겠습니다.

2. 메일 서버에 FTP 설정
가). Nmail 백업 스크립트 확인 및 수정

../nmail2/_backup/backup.sh 내용
------------------------------------------------------------------------------------------------------------------------------------
[****@**** _backup]# cat backup.sh
1 #!/bin/sh
2
3 ########################################################
4 # 설정
5 ########################################################
6
7 # MySQL 경로 및 접속 계정 설정.
8 #MYSQLDUMP=/usr/local/mysql/bin/mysqldump
9 MYSQLDUMP=mysqldump
10 MYSQL_USER=nmail
12 MYSQL_PASSWORD='a1b2c3d4'
13 MYSQL_DB=nmail
14
15 # 엔메일 설치 디렉토리
16 NMAIL_HOME=/home/nmail2/
17
18 # 백업파일을 보관할 디렉토리
19 BACKUP_DIR=/home/backup/nmail2/
20
21
22 #########################################################
23 # 백업시작
24 ##########################################################
25
26
27 FN=`date +"nmail2_"%Y%m%d"_"%H%M%S`
28 cd $NMAIL_HOME
29 echo "Backup Start..."
30
31 # 디비
32 echo "DB Backup : "$FN.sql.gz
33 $MYSQLDUMP -u$MYSQL_USER -p$MYSQL_PASSWORD --add-drop-table -a -Q -B $MYSQL_DB >
$BACKUP_DIR/$FN.sql
35 cd $BACKUP_DIR/
36 gzip $FN.sql
37 cd $NMAIL_HOME
38
39 # 소스
40 echo "Source, Config Backup : "$FN.src.tar.gz
41 tar zcvf $BACKUP_DIR/$FN.src.tar.gz nmail/ MailRoot/ \
42 --exclude="nmail/data/*" \
43 --exclude="MailRoot/domains/*" \
44 --exclude="MailRoot/logs/*" \
45 --exclude="MailRoot/dnscache/*" \
46 --exclude="MailRoot/spool/*"
47
48 # 메일파일
49 echo "Mail Backup : "$FN.mails.tar.gz
50 tar zcvf $BACKUP_DIR/$FN.mails.tar.gz MailRoot/domains/
51
52 # 로그파일
53 echo "Log Backup : "$FN.logs.tar.gz
54 tar zcvf $BACKUP_DIR/$FN.logs.tar.gz MailRoot/logs/ weblogs/
55
56 # 자료실 첨부파일
57 echo "Board upload Backup : "$FN.board.tar.gz
58 tar zcvf $BACKUP_DIR/$FN.board.tar.gz nmail/data/board/
59
60
61 # 기간이 오래된 백업 파일 삭제하기
62 echo "Old Backup Files Delete!!!"
63 find $BACKUP_DIR/*.tar.gz -mtime +7 -exec rm -rf {} \;
64 find $BACKUP_DIR/*.sql.gz -mtime +7-exec rm -rf {} \;
65
66 echo "Mail Backup Complete!!!"
--------------------------------------------------------------------------------------------------------------------
위와 같은 방법이 기본 적으로 제공되는 백업 스크립트 일것입니다. 여기에
FTP관련 하여 약간의 수정을 가하여 백업하고자 하는 파일만을 별도의 공간에
복사하는 설정을 합니다.

a) FTP백업용 파일 저장위치 설정하기 => backup.sh의 20번째 라인에 아래 내용을 삽입

# ftp 백업 임시 저장 위치
FTPBACK_DIR=/home/backup/ftp

b) 그 시점에 해당하는 파일만 FTP백업 폴더에 옮기기 위해 기존 파일을 삭제하기(65번째 라인에 삽입)

# ftp 임시 저장 공간 비우기
find $FTPBACK_DIR/nmail2_*.gz -exec rm -rf {} \;

c) FTP백업 파일을 FTP백업 저장공간에 복사하기(b아래에 복사)

#ftp 임시 저장 공간에 최신파일 올리기
cp $BACKUP_DIR/$FN.* $FTPBACK_DIR

이렇게 하면 backup.sh가 실행될때의 시간을 기준으로 FTP백업저장위치에 백업용 파일이 같이 복사되게
됩니다.

나) 외부 Winodws FTP 접속하기 위한 스크립트 작성
a) winodws ftp 사이트 주소 정보(접속 스크립트)
ftpbackup.sh를 vi로 새로 생성 하여 아래 내용 입력 후 저장

#!/bin/bash
ftp -n 111.222.333.444 < ./ftpuser
b) Windows ftp접속 계정 정보 및 파일전송 명령어 스크립트 작성
ftpuser 를 vi로 새로 생성 하여 아래 내용 입력 후 저장

user aaa 123456 ; aaa계정에 패스워드 123456을 사용하는 유저
lcd /home/backup/ftp ; 메일서버의 FTP백업용 파일 저장 디렉토리로 이동
bi ; 바이너리 설정
prompt ; prompt 설정
cd /mailbackup ; windows ftp서버의 백업파일을 저장할 디렉토리 루트로 이동
cd 6 ; 가장 오래된 백업파일이 있는 디렉토리로 이동
mdelete * ; 그 안에 있는 파일 전부 삭제
cd .. ; 루트로 이동
rmdir 6 ; 파일이 없는 빈 디렉토리 삭제(파일이 있으면 삭제가 안됨)
rename 5 6 ;이제 하루 씩 뒤로 미루는 작업- 디렉토리 이름만 변경
rename 4 5
rename 3 4
rename 2 3
rename 1 2
mkdir 1 ; 이제 현재시점에 올릴 파일이 저장될 디렉토리 생성
cd 1
mput *.gz ; 메일서버FTP백업용파일을 Windows 로 전송
bye ; 빠져나오기

보시면 아시겠지만 누적되는 백업파일은 6일동안만 유지됩니다. 이후 새로운 파일을 백업하기 위해 제일 오래된
파일이 있는 디렉토리를 삭제하고 한단계씩 이름을 수정하고 맨 마지막으로 현재 올리는 파일을 1이라는 디렉토리를 새로 생성하여 올립니다.

주의) windows ftp서버 홈디렉토리 아래 미리 디렉토리 이름을 1~6까지로 하여디렉토리를 만들어 두고 FTP사이트 설정을 하는게 접속 권한 에러를 줄이는 방법 입니다. ^^(용량이 크시다면 1~6보다 큰 1~30까지 환경에 맞게 만드시면 됩니다.)

3. Crontab 등록하여 일정 기간을 주기로 백업받기
#crontab -e
00 01 * * * /home/backup/mailbackup.sh ; 메일서버 자체에 백업하기(매일 01시)
30 04,12 * * * /home/nmail2/tools/mail_box_dbsync.php ALL ; 메일서버 DB싱크 맞추기(매일 04:30과 12:30)
00 06 * * * /home/backup/ftpbackup.sh ; 외부 Windows로 백업하기(매일06시)

위와 같이 crontab을 등록해 주면 됩니다.

외부 FTP서버는 꼭 windows만 되는 것은 아닙니다. 다른 OS도 FTP서버만 가동이 되면 가능합니다.
단, 저는 FTP로 백업할 시 하드가 풀로 차거나 이상 발생시 조치를 빠르게 하기 위해 Windows를 사용했습니다.

사용 환경에 따라 디렉토리 위치, DB위치 등이 다르니 참고만 하세요..
메일서버 뿐만 아니라 홈페이지나 다른 파일 들도 이런 식으로 백업하시면 됩니다.

댓글 0
이전 글 그룹메일 보내기(메일링리스트) 1 최*영 2007.06.14
다음 글 Nmail php 설치과정에서. 문*진 2007.02.15