본문으로 바로가기
반응형

Backup의 종류

Hot Backup Cold Backup
데이터 베이스를 중지하지 않은 상태로 백업 데이터 베이스를 중지한 상태로 데이터 백업
백업하는 동안 서비스가 실행됨 백업하는 동안 서비스가 중단됨
백업하는 동안 데이터가 변경되어 완전한 백업이 안될 수도 있음 안정적으로 백업 가능

 

Logical Backup Physical Backup
SQL 문으로 백업 파일 자체를 백업
느린 속도로 백업과 복원이 진행됨 빠른 속도로 백업과 복원이 진행됨
디스크 용량을 적게 사용함 디스크 용량을 많이 사용함
작업시 시스템 자원을 많이 사용함 작업시 시스템 자원을 적게 사용함
문제 발생에 대한 파악이 쉬움 문제 발생에 대한 파악과 검토가 어려움
서버 OS 호환이 잘됨 서버 OS 호환이 잘안될수 있음

 

Hot Logical Backup

먼저, ubuntu에 MySQL을 연결하였으므로, unbuntu계정에 접속한다.

ssh -i ~/Downloads/.ssh/key.pem ubuntu@퍼블릭IP

ubuntu계정에서 백업파일을 자동생성하도록 만들어주기로 한다.

- backup 디렉토리를 생성한다.

mkdir backup
ls

- root계정으로 password를 입력하고, DB를 backup디렉토리에 DB_sql로 저장한다.

나중에 이 코드를 crontab에 추가하여 설정한 스케줄대로 백업파일이 생성되도록 할 것이다.

mysqldump -u root -ppassword DB > backup/DB_backup.sql

- backup 디텍토리에 DB.sql파일이 잘 생성되었는지 확인해본다.

ls
cd backup
ls
vi DB_backup.sql

*만약 실행을 잘못하여 멈추고 싶다면 crtl+c 를 입력한다.

 

- 최상위 폴더로 돌아간다.

cd ~/
pwd
rm -rf backup
mkdir backup

- backup.sh 쉡 스크립트 파일을 생성, 수정하여 날짜이름으로 FILE이 저장되는 코드를 만든다.

vi backup.sh

vi에디터에서 아래 코드를 입력한다.

bash쉘에서 동작하는 쉘스크립트임을 알리고, ₩(')문자를 사용하여 파일이름생성하고, mysql실행코드를 넣는다.

*중간 중간 끊어서 cat backup.sh과 추가될 코드를 실행시켜본다.

#!/bin/bash

BD=`date +%Y%m%d_%H_%M --date=today`
FILE=${BD}.sql

# echo $BD
echo "mysqldump -u root -ppassword DB > ~/backup/$FILE"
mysqldump -u root -ppassword DB > ~/backup/$FILE

 

코드를 한번 확인해준다.

cat backup.sh

- backup.sh 스크립트 실행

/bin/bash backup.sh

- backup 디렉토리 확인

ls backup

확인이 되었으면, crontab에 적용해야 한다.

- 크론탭에 접속하여 설정한다.

crontab -e

crontab에서 아래 코드를 적어준다. (1분마다 생성)

* * * * * /bin/bash backup.sh

이제, 백업이 자동실행되어 backup디렉토리에 1분간격으로 날짜시간이름의 백업파일이 생성된다.

- 백업을 중단하고 싶다면 crontab에 다시 접속하여 코드를 주석처리 해준다.

crontab -e
# * * * * * /bin/bash backup.sh

 

현업에서는 crontab을 통해 일주일단위로 저장하도록하고,

백업 전용 서버도 하나 만들어서 백업파일을 SCP를 통해 전송한다.

사용 서버가 없어질 경우 백업파일들도 모두 날라가기 때문이다.

(용량문제때문에 2111로만 된 이름을 저장파일로 두고,11월 한달동안 백업되는 파일은 overwriting되도록 하는 방식도 사용한다.)

반응형