본문 바로가기
Programming/Raspberry Pi

Docker Mysql Server 주기적으로 백업하기(crontab 활용하기)

by BACKK0M 2018. 8. 7.
반응형

예전에 라즈베리파이 도커 세팅을 진행하였습니다. 

(라즈베리파이 + Docker + Redmine + Mysql + Git)

 

하지만 DB가 날아갈 수 있다는 생각이 들어 많이 불안하였습니다.

그래서 이번 포스팅에서는 bash shell로 제작 된 Docker 명령어를 Crontab을 이용하여 주기적으로 실행하도록 설정하고자 합니다. 즉, 주기적으로 DB를 백업하고자 하는 것이죠.

 

목차는 아래와 같습니다.

-----------------------------

1. 저장할 디렉토리 생성

2. postfix 설치

3. 스크립트 작성

4. 백업 스크립트 명령 예약하기

5. 복원 방법

-----------------------------

 

1. 저장할 디렉토리 생성

백업 된 DB 쿼리를 저장할 디렉토리를 생성합니다.

(원하시는 분들만 하시면 될 것 같아요.. ㅎㅎ)

 

$ mkdir sql_backup

 

 

2. postfix 설치

crontab을 사용하기 위해 postfix를 설치해줍니다.

 

$ sudo apt-get install postfix

 

위와 같이 나올텐데 '엔터'를 누르고 여러 메뉴가 나오면 '설정 없음' 을 선택하고 '엔터'를 누릅니다.

 

3. 스크립트 작성

mysql container로부터 특정 db를 백업하기 위한 스크립트를 작성합니다.

 

$ sudo nano redmine_db_backup.sh

아래와 같이 스크립트를 작성해줍니다.

 

echo "Backup start!"

current=$(date +"%Y%m%d")



docker exec mysql컨테이너명 /usr/bin/mysqldump -u root --password=비밀번호 DB명 > 저장경로/파일이름_$current.sql



echo "Backup complete. Check the path 저장경로"

 

백업된 sql 파일 끝에 백업될 때 날짜가 같이 기록되도록 설정되어 있습니다.

 

4. 백업 스크립트 명령 예약하기

crontab을 활용하여 제작한 쉘스크립트를 예약하여 자동으로 실행되도록 합니다.

 

예약된 작업을 수정하기 위해 아래의 명령어를 입력해줍니다.

$ sudo crontab -e

 

 

crontab 수정을 위한 텍스트 에디터를 설정해주어야 하는데 '2' 를 입력하여 nano 에디터를 사용하도록 합니다.

(자신이 원하는 에디터 선택하시면 됩니다.)

입력 후 아래와 같은 내용이 담긴 설정 파일이 열리게 됩니다.

crontab 활용에 대한 간단한 설명을 하자면 맨 아래에 적혀있는(주석으로 되어있는) 것이 바로 예약 실행 될 주기입니다.

m 분 (0~59)

h 시간 (0~23)

dom 일 (1~31)

mon 월 (1~12)

dow 요일 (0~6 [0: 일요일 ... 6: 토요일])

command 실행할 명령어

 

위에서 제작한 쉘스크립트를 실행하고, 1주일에 한 번씩 실행하도록 설정하겠습니다.

아래 부분을 문서의 맨 끝에 적어줍니다.

 

0 0 * * 6 sudo sh /home/pi/redmine_backup/redmine_db_backup.sh

 

토요일 0시 0분에 sudo sh /home/pi/redmine_backup/redmine_db_backup.sh 명령어를 실행하란 뜻입니다.

*은 모든 조건을 만족한다는 뜻으로 해석하시면 될 것 같습니다.

 

 

ctrl+x 를 눌러 저장하고 빠져나옵니다.

 

cron을 재시작해줍니다.

$ sudo service cron restart

 

5. 복원 방법

백업된 sql을 백업하는 방법입니다.

 

아래의 명령어를 사용하여 복원합니다.

$ cat 백업파일.sql | sudo docker exec -i mysql-server /usr/bin/mysql -u root --password=비밀번호 DB명

 

이상으로 crontab을 활용한 docker mysql server DB백업을 진행하고 이를 복원하는 방법에 대한 포스팅을 마치도록 하겠습니다.

감사합니다 :)

반응형