재학습/SYSTEM

서버를 다꺼버릴거야! - (3) Docker Mongo DB BackUp Dump

재삉 2021. 2. 15. 23:27
반응형

MongoDB덤프는 생각보다 쉽다.

그러니 진정하고 보아라.

 

mongodump --out 덤프파일저장폴더경로 --gzip

위의 커맨드를 실행하면 무사히 덤프를 뜰 수 있다.

그럼이만.

 

 

 

이렇게 쉬운거라면,

나의 퇴근시간은 늦어질일이 없었을것이다.

 

뭐가 다른가?

이 몽고디비는 도커에 띄워져있다.

따라서 나는 새로운 방법을 생각해봐야했다.

 

먼저 구조를 잡아봤다.

#!/bin/bash

timestamp=`date +%Y%m%d%H%M`

대충 도커의 몽고디비를 덤프시키는 코드

타임스탬프는 저번에 정리했던 Mysql 덤프때 썼던것과 같은이유로 작성했다.

덤프가 저장될 파일또는 폴더의 이름이 계속변경되어야하기 때문에.

 

여튼 문제는 

'대충 도커의 몽고디비를 덤프시키는 코드' 이다.

 

여러 시행착오 끝에 찾아냈다.

바로, 

1.도커 컨테이너에 접속해서

2.덤프시킨다음

3.도커밖으로 꺼내오면된다.

Wow So Easy하지않은가?

 

자 그러면 구현하면된다.

 

docker에는 다양한 기능이 존재한다.

도커 컨테이너에 접근하지않아도, 도커 컨테이너 안에서 수행시키는것과 같은 기능을 제공한다.

그렇게 탄생한 몽고디비 컨테이너에 접근하여 몽고디비를 덤프시키는 코드는 다음과 같다.

docker exec 도커컨테이너이름 sh -c "mongodump --out 덤프폴더경로 --gzip"

 

이 코드로 우리는 덤프폴더경로에 덤프파일을 만들 수 있다.

 

그렇다면 마지막,

이 데이터를 도커밖으로 꺼내오면된다.

어떻게할까?

정말 멋진 개발자가 쓴 블로그 글을 인용했습니다.

바로,

docker cp 도커컨테이너이름:덤프폴더경로 덤프폴더의데이터가저장될_컨테이너밖의_폴더경로

짜란! 멋지지않은가!

도커컨테이너 안에있는 데이터를, 도커컨테이너를 운영하는 서버로 가져올 수 있다.

배치를 반대로한다면, 서버의 데이터를 도커컨테이너 안으로도 집어넣을 수 있다.

 

자 그러면 이를 활용해서 쉘 스크립트를 마무리지어보자.

#!/bin/bash

timestamp=`date +%Y%m%d%H%M`

mkdir /database/mongo_"$timestamp"
docker exec 도커컨테이너이름 sh -c "mongodump --out /dump --gzip"
docker cp 도커컨테이너이름:/dump /database/mongo_"$timestamp"

 

도커컨테이너로 띄워져있는 몽고디비의 데이터를 덤프시키고

서버밖으로 저장하는

깔끔하고 이쁜 코드가 완성되었습니다~~! 

 

아마 다음편은 Restore시키는 내용이지않을까 싶다.

반응형