도커로 실행 중인 몽고DB 데이터 옮기기 (백업/복원)

byron1st·2021년 8월 25일
0

이 글에서는 도커로 실행 중인 몽고DB의 데이터를 파일로 백업하여, 이를 다시 복원하는 방법을 설명한다.
(개인적으로 한 몽고DB 데이터를 통째로 다른 컨테이너의 몽고DB로 옮겨야 할 일이 생겨 수행하게 되었다.)

몽고DB 백업하기

Back Up and Restore with MongoDB Tools

우선 참고할 공식 문서는 위와 같다.

몽고DB를 백업하는 방법은 몇가지가 있는데, 여기서 나는 몽고DB 도구들을 이용해서 파일로 덤프를 뜬 후, 이를 다시 복원하는 방법을 이용했다.

이를 위해서는 mongodump 라는 툴을 이용한다. 이 툴은 몽고DB 공식이미지로 만든 도커 컨테이너라면 컨테이너 내부에 자동으로 설치되어 있다. 일단 도커 컨테이너로 접속하자

docker exec -it service-db bash

접속 후에는 mongodump 툴을 이용해서 백업한다.

mongodump -o path/to/output/directory

-d 는 백업할 데이터베이스 이름을 의미하고, -o 는 출력할 폴더를 의미한다. 덤프 파일은 1개의 파일이 아니라 여러 파일들이므로, -o 에는 폴더를 할당한다. 그러면 해당 폴더 안에database_name 으로 폴더가 만들어지고, 그 안에 덤프된 데이터베이스 내용이 담긴다.

만약, 사용자이름, 비밀번호로 DB 접근을 제한하고 있다면, --username=admin, --password=adminpassword 와 같은 식으로 옵션을 추가해주자.

압축하기

도커 컨테이너 밖으로 파일을 꺼내기 위해 하나의 파일로 압축해주자. 압축은 tarball gzip 으로 한다. 압축 명령어를 맨날 까먹는데, 개인적으로 아래 링크를 북마크해두고 항상 참고한다. 맨날 참고하다보니, 기억을 못하는거 같기도 하고..

[리눅스] 리눅스 tar, gz 압축 및 해제

tar -zcvf dump.tar.gz path/to/output/directory

도커 컨테이너 밖으로 파일 꺼내기

도커 컨테이너 안에 있는 파일을 호스트 파일 시스템으로 가져오거나, 반대로 호스트의 파일을 도커 컨테이너 내부의 파일 시스템으로 가져오기 위해서는 docker cp 명령어를 이용한다. 해당 명령어는 scp 와 거의 유사하다.

docker cp <container>:<source-path> <local-dest-path>

이 내용은 How to copy files to/from a container을 참고했다.

몽고DB 복원하기

복원할 때는 mongorestore 를 이용한다. 이를 위해, 압축을 풀어준다. 압축을 풀게 되면, 데이터베이스 이름을 이름으로 한 폴더들이 쭉 나열되는데, 그 상위 폴더를 지정하여 명령어를 실행한다.

mongorestore path/to/output/directory

마찬가지로, 사용자이름, 비밀번호로 DB 접근을 제한하고 있다면, --username=admin, --password=adminpassword 와 같은 식으로 옵션을 추가해주자.

profile
Hyperledger Fabric, React/React Native, Software Architecture

0개의 댓글