아래 설명글은 Ubuntu 뿐만 아니라 모든 Linux 배포판에 대해서 공통적으로 실행가능합니다.
서버를 운영하면서, 백업과 보안은 항상 염두해 두어야 하는 사항이다.
리눅스 시스템에서 주기적으로 파일과 데이터베이스 백업을 하는 방법에 대하여 설명하겠다.
* Dropbox 에 원격 자동 백업하는 방법은 여기에 : https://blog.lael.be/post/5952
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 등을 사용해서 원격 저장?
원한다면 https://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
[TIP] cron 에 여러 명령어를 등록하여 해결하지 않고 쉘 스크립트를 작성하는 이유 : cron 은 순차 처리를 할 수 없습니다.
즉, 백업 한 후에, 압축하고, 파일전송을 하는 등의 순차적인(sequential) 작업을 하려면 반드시 shell script 로 작성하셔야 합니다.
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 -hlocalhost -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/jingjing 1>/dev/null 2>/dev/null mysqldump --extended-insert=FALSE -hlocalhost -uroot -ptest1234 mydbname > /backup/mydbname.`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 -e0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null0 16 * * * /root/backup.sh 1>/dev/null 2>/dev/null
8) 확인
잠자고 일어난 후 /backup 폴더에 백업이 잘 되어있나 확인해 본다.
'WEBD > 서버' 카테고리의 다른 글
FFMpeg java로 연습하기 [ Server ][ Linux ] (0) | 2020.10.03 |
---|---|
centos7 FFMpeg 설치방법 [ Server ][ Linux ] (0) | 2020.10.03 |
openlitespeed 와 mysql mariaDB 설치 및 실행 [ Server ][ Linux ] (0) | 2020.10.03 |
centos7 ssh 설정 변경 및 방화벽 등록/ 삭제 [ Server ][ Linux ] (0) | 2020.10.03 |
CentOS 7 ruby 설치 [ Server ][ Linux ] (0) | 2020.10.03 |