문서의 이전 판입니다!
서버 백업
서버를 백업하는 방법은 매우 다양하다. 그중 하나가 나처럼 무식하게 통째로 복사하는 경우인데, 그렇다고 해서 스토리지를 그대로 복사하지는 않는다. 가끔 보면 dd if=/dev/sda of=/dev/sdb bs=2MB 식으로 HDD 를 통째로 복사해버리는 경우도 있는데, 초기 설치하고 설치본 백업 뜨는 용도 외에는 저런 방법을 쓰고 있지는 않다.
내 경우는, 주로 4중 백업이다.
서버 A, B, C 가 있고, 서버 A 내에서 백업하고 그게 다시 B 와 C 로 백업된다. 원본, A 내의 백업본, B, C 의 백업본.. 이렇게 모두 4개의 백업본이 있다.
윈도 서버는 앞에 1편에서 얘기한 것과 유사한 방식으로 하고 있고 (그저 무식하게 복사한다..), 유닉스나 리눅스쪽은 다음과 같은 스크립트를 돌린다. 사실 보면 알겠지만, 무식한 스크립트다.
일단, 간단히 설명하면,
1. 중요 파일 압축 후 특정 디렉터리로 복사 (보통 /home 밑에 디렉터리를 하나 만들어서 거기에 복사)
- DB (mysql, MariaDB) 등 디렉터리를 통째로 압축
- DB 를 dump 떠서 압축
- 설정파일들 (/etc, DNS 서버를 돌린다면 /var/named 등도 같이) 을 통째로 압축
- 웹페이지 (여기서는 /var/www) 를 통째로 압축
2. 위의 4가지 압축폰을 scp 로 B 서버로 복사
- 주로 scp 사용
- 사전이 미리 password 없이 로그인 가능하도록 설정 필요
3. 압축한 파일 중 30일 지난 파일 삭제
4. A 서버내의 백업 파티션에 있는 (/home2 또는 /backup 파티션, 보통 OS 가 설치되지 않은 독립된 스토리지 공간) 백업 파일 중 90 일 지난 파일 삭제
5. 웹페이지, DB, 설정파일, 사용자 디렉터리 (이 경우에는 /home) 을 통째로 백업 파티션 (위에서 말한 /home2 또는 /backup 파티션) 으로 복사
6. /home 디렉터리 통째로 복사
#!/bin/sh /usr/bin/rdate -s time.bora.net /sbin/hwclock -w DATE=`date +%Y%m%d.%H%M` sync && sync && sync cd / cd /var/lib/mysql tar cvf /home/data/BACKUP/MYSQL/mysql_$DATE.tar --exclude /var/lib/mysql/mysql.sock * bzip2 -9 /home/data/BACKUP/MYSQL/mysql_$DATE.tar mysqldump -uDB관리자 계정명 -pDB관리자 비밀번호 --all-database > /home/data/BACKUP/MYSQL/mysql_dump_$DATE.sql bzip2 -9 /home/data/BACKUP/MYSQL/mysql_dump_$DATE.sql cd / cd /etc tar cvf /home/data/BACKUP/ETC/etc_$DATE.tar * bzip2 -9 /home/data/BACKUP/ETC/etc_$DATE.tar cd / cd /var/www tar cvf /home/data/BACKUP/WWW/www_$DATE.tar * bzip2 -9 /home/data/BACKUP/WWW/www_$DATE.tar scp /home/data/BACKUP/MYSQL/mysql_$DATE.tar.bz2 BACKUP계정@BACKUP-SERVER-B-IP:/home/data/BACKUP/MYSQL scp /home/data/BACKUP/MYSQL/mysql_dump_$DATE.sql.bz2 BACKUP계정@BACKUP-SERVER-B-IP:/home/data/BACKUP/MYSQL scp /home/data/BACKUP/ETC/etc_$DATE.tar.bz2 BACKUP계정@BACKUP-SERVER-B-IP:/home/data/BACKUP/ETC scp /home/data/BACKUP/WWW/www_$DATE.tar.bz2 BACKUP계정@BACKUP-SERVER-B-IP:/home/data/BACKUP/WWW find /home/data/BACKUP/MYSQL -mtime +30 -exec rm -f {} \; find /home/data/BACKUP/ETC -mtime +30 -exec rm -f {} \; find /home/data/BACKUP/WWW -mtime +30 -exec rm -f {} \; find /home2/HOME/data/BACKUP/MYSQL -mtime +90 -exec rm -f {} \; find /home2/HOME/data/BACKUP/ETC -mtime +90 -exec rm -f {} \; find /home2/HOME/data/BACKUP/WWW -mtime +90 -exec rm -f {} \; rsync -arv /var/www/* /home2/BACKUP/WWW/ rsync -arv /var/lib/mysql/* /home2/BACKUP/MYSQL rsync -arv /etc/* /home2/BACKUP/ETC cd / cd /home rsync -a /home/* /home2/HOME sync && sync && sync