리눅스 시스템에서 주기적으로 파일과 데이터베이스 백업을 하는 방법에 대하여 설명하겠다.
1. 정책 세우기
언제마다 백업을 할 것인가? 백업 방식은 어떤것인가? 백업 유지 기간은? 백업 저장소는 어떤 것인가?
1) 백업 주기 정책
대부분의 서버에서 접속자가 가장 낮을때는 4:00 AM ~ 4:30 AM 입니다.
그래서 많은 사람들이 새벽 4:00 에 백업이 이루어지게 설정합니다.
하루에 2번 백업하고 싶으면 오전/오후 4:00 에 백업을 하도록 합시다.
2) 백업 방식 정책
백업이라는 것이 데이터를 복사해 두는 것이기 때문에 하드디스크의 여유공간이 많아야 합니다.
# df -h
명령어를 통해서 저장할 디스크의 여유공간이 충분한지 파악해 봅시다.
또 백업에는 CPU의 연산이 이루어집니다. (파일을 읽어서 새로운 곳에 기록)
– 압축 백업 : (tar -czpf 백업) 일반적으로 많이 쓰이는 백업입니다. 이 작업에는 CPU 가 많이 사용됩니다.
10GB 미만 압축이면 상관없는데 그 이상의 대용량의 압축 백업은 주의가 필요합니다. 백업 시켜놓고 CPU 사용량을 확인하세요.
– 복사 백업 : (cp -R 백업) 압축하지 않고 복사만 합니다. 사용 용량을 많이 차지하지만 (압축하지 않는다는 뜻) 백업할 때 CPU 사용량이 크게 증가하지는 않습니다.
– 증분 백업 : (rsync 백업) 변동사항만 비교하여 백업합니다. 비교를 위해서 파일은 항상 압축되지 않은 상태로 보관됩니다.
3) 백업 유지기간 정책
– 몇일치를 보관할 것인가? 또는 몇개의 백업 파일을 보관할 것인가?
4) 백업 저장소 정책
– 백업 파티션을 나누어서 저장?
– 디스크를 새로 장착하여 저장?
– FTP 등을 사용해서 원격 저장?
http://blog.lael.be/post/1387 글을 참조하여 별도의 백업서버의 폴더를 연결(mount)하여 백업을 해보도록 하자.
2. 설정된 정책을 바탕으로 백업 세팅하기
백업 정책 예시 :
– 하루 2회 오전/오후 4시에 백업.
– 파일과 디비(MYSQL or MariaDB) 백업.
– 백업 저장소는 동일 디스크의 /backup 폴더.
– 백업 파일은 10일치를 보관한다.
작업은 root 권한에서 실행한다.
# su -l root 나 # sudo su 등의 명령어로 root 권한으로 상승하여라.
1) 백업이 저장될 폴더 만들기.
# mkdir /backup
2) 퍼미션 조정
# chmod 700 /backup
3) 백업 스크립트 작성
# cd /root
# vi backup.sh
tar 명령어는 파일 압축 백업을 실시합니다.
mysqldump 명령어는 데이터베이스 백업을 실시합니다.
find 관련 명령어는 10일이 지난 파일을 삭제합니다.
— tar 와 mysqldump 는 여러 줄 쓰셔도 됩니다.
— 설정을 바꿀 수 있는 부분은 파란색과 빨간색으로 표시하였습니다.
#!/bin/bash
tar -czpf /backup/myuser.`date +%Y%m%d%H%M%S`.tgz /home/myuser/www 1>/dev/null 2>/dev/null
mysqldump --extended-insert=FALSE -uroot -pmypassword mydbname > /backup/mydbname.`date +%Y%m%d%H%M%S`.sql
find /backup/ -type f -mtime +10 | sort | xargs rm -f
아래 내용을 더블클릭해서 복사한 후 사용하여라.
1
2
3
4 |
#!/bin/bash tar -czpf /backup/jingjing .` date +%Y%m%d%H%M%S`.tgz /home/minecraft3s/jingjing 1> /dev/null 2> /dev/null mysqldump --extended-insert=FALSE -uroot -pjingjing.kr sir_doc > /backup/sir_doc .` date +%Y%m%d%H%M%S`.sql find /backup/ - type f -mtime +10 | sort | xargs rm -f |
4) 백업 스크립트 실행권한 설정
# chmod 700 backup.sh
5) 연습삼아 실행
# ./backup.sh
6) 확인
# cd /backup
# ll -h
이 때 total 에 나온 용량과 df -h 명령어에 나온 여유공간을 비교하여 백업 정책이 적합한지 판단한다. (디스크 여유공간 비교)
backup.sh 의 find 관련 명령어에서 10 이라는 숫자를 변경하면 된다. (디스크 용량이 부족할 경우 5일치만 저장하도록 바꾸셔야겠죠?)
7) 주기적인 실행
cron (예약관리자 실행 프로그램)에 매일 오전/오후 4시 0분에 실행되도록 설정한다.
# crontab -e
0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null
0 16 * * * /root/backup.sh 1>/dev/null 2>/dev/null
8) 확인
잠자고 일어나서 /backup 폴더에 백업이 잘 되었나 확인해 본다.
'서버 등 운영체제(OS) > Linux' 카테고리의 다른 글
tar로 압축 해제할 때, 원하는 디렉토리를 지정해서 해제 (0) | 2015.09.24 |
---|---|
-bash: ./test.sh: /bin/bash^M: bad interpreter: 그런 파일이나 디렉토리가 없음 (0) | 2015.09.23 |
깨진 파일명 삭제 방법 (0) | 2015.06.25 |
[XE] HTTP 403 Upload Error 일때, 서버관리자 해결법 (0) | 2015.06.08 |
Apache Userdir http://Local IP, Domain/~Account/ (0) | 2015.05.20 |