본문 바로가기

우아한테크코스

Docker 컨테이너에서 실행 중인 MySQL 데이터베이스 자동 백업하기

스탬프크러쉬가 실 사용자에게 서비스 되면서 DB 관리에 대한 중요성이 매우 실감되었다!

불가피한 이유로 DB 가 날아간다면 그야말로 재앙이 될 거라는게 예상이 되었다.

 

그래서 DB 를 자동 백업할 수 있도록 스크립트를 작성하고 스케줄러를 설정해두었다.

 

아래 방법은 데이터베이스 서버에서 진행해주었고 현재 데이터베이스 서버에서 docker container 를 띄워두고 해당 container 에서 mysql 서버가 실행되는 중이다.

 

1. 백업 파일을 저장할 폴더를 생성

 

mkdir /db_backup

 

2. 생성된 백업 폴더의 권한을 수정

 

chmod 755 /db_backup

 

3. 백업을 수행할 스크립트 파일 생성

 

vi /db_backup/backup.sh

 

4. 생성된 스크립트 파일의 내용 입력

 

# /bin/bash
FILE_NAME=backup_`date +"%Y%m%d%H%M%S"`
BACKUP_DIR=/home/ubuntu/db_backup/

sudo docker exec mysql-container sh -c 'exec mysqldump -u root --password=[비번] stampcrush' > $BACKUP_DIR$FILE_NAME.sql

sudo find $BACKUP_DIR -ctime +5 -exec rm -f {} \\;

 

- DB 백업 파일의 이름은 백업될때의 시간을 파일 뒤에 붙여준다. 이슈가 발생했을 때 이슈가 발생한 시점의 로그 기록을 보고 해당 이슈 발생 전의 백업 파일로 DB 를 백업하면 되기 때문이다.

- 스탬프크러쉬는 실사용자가 아직 적기 때문에 삭제 주기는 5일로 정해주었다.

 

5. 실행 권한 부여

 

chmod +x backup.sh

 

6. 작업 스케줄러(crontab) 설정

 

crontab -e

 

7. 크론탭 설정

 

매일 새벽 4시에 실행

0 4 * * * sudo /usr/bin/sh /home/ubuntu/db_backup/backup.sh

- 유닉스에서는 잡 스케줄러를 크론이라고 부른다

- 스탬프크러쉬의 사용자 카페는 영업시간이 오전 11시~오후 11시이기 때문에 새벽 시간으로 백업을 수행하도록 해주었다. 

 

8. 크론탭 설정확인

 

crontab -l