MongoDB 에서의 백업과 복구

mongodump로 백업하기

MongoDB 에서 백업을 하는 명령어는 mongodump이다.

mongodump 명령어를 이용하여 백업을 하려면 다음과 같이 입력해 보자.

mongodump -uusername -ppassword -d myapp -o ~/backup

mongodump -u내계정 -p내패스워드 -d db명 -o 백업할 위치

-u 와 -p 옵션은 붙여서 사용할 수 있다.

만약 특정 콜렉션만 백업을 하고 싶다면

-c 콜렉션명

옵션으로 특정 콜렉션만 백업을 할 수도 있다.

mongorestore 로 복구하기

mongorestore -u계정명 -p비밀번호 -d db명 ~/backup

mongodump와 틀린점은 -o 옵션을 사용하지 않고 바로 기술하는 점이 다르다.

MongoDB 의 버전이 달라서 복구가 정상적으로 안될 경우(Nmap 에서 Wiredtiger로 변경할 경우) 가 있는데 인덱스 복구를 못하는 경우일 수 있다. 이 때는

--noIndexRestore

옵션을 추가하고, 인덱스를 다시 걸어주면 되겠다.

 

MongoDB클라이언트인 Studio 3T(구 MongoChef) (https://studio3t.com/) 를 이용하면 더 쉽게 백업과 복구가 가능하다. Studio 3T의 사용방법에 대해서는 다음에 안내하도록 하겠다.

나의 경우는 스케쥴링할 때는 mongodump 를 사용하고 crontab 을 사용하여 데일리 백업본을 만들고, 일반적으로 데이터 수정 / 이동 작업할 때는 Studio 3T로 작업을 하는 편이다.

MongoDB 와 안정성

여러분이 MongoDB 를 도입하려 사용하려고 한다면 주변에서는 한번 말릴 것이다.  의심의 눈초리로 “MongoDB 가 DB가 깨질 수 있다는데 안전한가요?” 이러한 질문들을 많이 들어봤다.

결론적으로말하자면 깨질 수 도 있다. 하지만 복구가 가능하다. 다른 데이터베이스도 깨질 수 있지 않는가 하는 것이 필자의 생각이다. 한가지 예를 들면 MySQL 이 깨질 수도 있는 것이다. 물리적인 손상은 어쩔 수 없는거 아닌가? 하는 것이다.

물론 예전 버전에서는 안정성이 낮았지만 현재의 버전, 특히 WiredTiger 엔진에서는 안정성이 대폭적으로 좋아졌기 때문에 깨질 확률이 그렇게 많지는 않다는 것을 말하고 싶다.

기본적으로 데이터베이스의 백업은 주기적으로 (최소 Daily)  하는 것이 원칙이며, 시스템이 다운되거나 물리적 손상이 있어서 복구가 못하게 되는 순간이 오면 백업해 놓은 백업으로 복구하는 것이 일반적인 복구 절차이며, 이는 모든 데이터베이스 시스템에서 동일하게 적용되는 것이다.

MongoDB 서비스가 가동중에 갑자기 전원을 끈다면, mongod 실행시에 –repair 옵션을 써서 복구를 진행해야 할 것이다. 아직 물리적인 손상으로 인하여 MongoDB를 재가동 시키지 못한 경우는 없지만, 대부분은 –repair 옵션으로 복구가 가능할 것이다.

MongoDB 라고 하여 안정성이 낮다고 하는 것은 “기우이다”라는 것을 말하고 싶다.

그럼 접근 방법을 달리하여 아에 안정적으로 구동될 수 있는 시스템을 구성한다면 어떨까 하는 것이다.

이 때 사용하는 것이 Replication이다.

Master / Slave 라고도 하며 Primary / Slave 라고도 하는 이 구조, (MongoDB 에서는 Primary / Slave) 로 표현한다.

대부분의 DB에서 지원하며 , 안정성을 위해 데이터베이스를 복제하며, 한쪽 데이터베이스가 구동되지 않은 상태라고 하더라도, 다른 나머지 데이터베이스 중 하나가 그 역할을 대신할 수 있게 하는 방법이다.

MongoDB에서는 보통 3개로 된 Replica set(복제셋) 을 사용하며 Master , Slave 2개로 구성한다.

그리고 이 3개의 Replica set 으로 구성되면 상시 구동되는 데이터베이스를 만들 수 있다.

만약 시스템 중 한곳에서 물리적인 업그레이드를 한다거나해서 시스템을 리부팅을 시킬 필요가 있을 경우에도 그냥 작업을 하고 다시 구동을 하면 자동적으로 그 중지되어 있던 상태의 데이터 값을 다른 데이터베이스에서 복제해 오게 된다. (정말 아무런 작업을 안해줘도 다시 살아난다.)

따라서 중단 없이 운영을 해야 하는 시스템에는 이 Replica set이 필수라고 할 수 있겠다.

Replica set 을 구성해서 좋은점 중 한가지를 소개하면, 만약 통계 프로그램을 구동시킬 때 부하가 많이 걸리게 될 것이다. 이것을 Slave 데이터베이스에 연결하여 작업을 하면 실 서비스에 영향을 받지 않으면서 통계를 낼 수 있다. 안정적으로 운영하면서도 통계가 필요할 경우 적합한 사용방법이라고 할 수 있겠다.

다음 챕터에는 이 Replica set 을 직접 만들어 보는 방법을 안내하겠다.

우분투에서 MongoDB 설치하기

이 문서는 드래프트 문서이다. 사용하는데 크게 문제는 없으나, 일부 내용이 변경될 수 있다.

가장 인기 있는 리눅스 배포판인 Ubuntu 16.04 LTS(64bit) 를 기본으로 MongoDB를 설치한다. 많은 분들이 Ubuntu 로 서버를 구축하고 있으며, APT (for Advanced Package Tool) 를 통해 손쉽게 MongoDB 를 설치할 수 있고, 특히 AWS 나 Azure를 이용하여 서비스를 한다면 거의 기본적으로 선택하게 될 리눅스 배포판이다.

설치 방법은 간단하다.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

sudo apt update

sudo apt install -y mongodb-org
그 다음에는 MongoDB 를 실행하여 보자.
sudo service mongodb start

MongoDB가 정상적으로 데몬으로 등록되었는지 확인하려면

sudo service mongodb status

그럼 이제 mongo  명령어를 이용하여 MongoDB에 접속해 보겠다.

mongo

 

정상적으로 mongodb 가 접속이 되었다면 이제 MongoDB 를 사용할 수 있다.
mongodb를 실제 서비스에 적용하려면 비밀번호 인증을 거쳐서 접근할 수 있어야 하기 때문에 (물론 비밀번호를 걸지 않고 서비스는 가능하다.) 사용자 계정을 추가하고 삭제 및 관리, Database를 관리할 수 있는 root 계정이 필요하다.
그러면 이제 root계정을 만들어 보겠다. admin database 에 접근해서 root user 를 생성해 보겠다.

use admin
db.createUser({user: "root", pwd: "mypassword", roles: [{ role: "root", db: "admin" }] });

정상적으로 root 계정이 설정되었다면 /etc/mongod.conf 에서 MongoDB 에서

security:
 authorization: enabled

authorization 을 enabled 해준다.  key: value의 형식으로 되어 있는 YAML 문법으로 작성하기를 권장한다. 이미 기본으로 만들어진 설정파일이 YAML 로 되어 있을 것이므로 주석처리를 해제해주고 위와 같이 작성해 주면 된다.

다시 실행해 준다.

service mongod restart

이제 내 계정을 만들어 준다. 이 때 내가 원하는 db명을 선택해 준다.

use app    #app 대신에 내가 만들 db명을 선택
db.createUser(
 { user: "app",
 pwd: "mypassword",
 roles: ['readWrite','userAdmin'] } )

정상적으로 만들어 졌다면 quit 명령어로 빠져나오고

다시 접근해보자.

mongo -uapp -pmypassword app

정상적으로 접근이 되는 것을 확인할 수 있다.

 

다음 목차

  1. MongoDB 와 방화벽
  2. 기본적인 MongoDB 명령어 및 사용 방법
  3. Studio 3T(MongoChef), Robomongo, MongoHub 등의 MongoDB Client 를 이용해서 MongoDB 를 내 컴퓨터에서 관리하는 방법
  4. 백업 및 복구하는 방법
  5. Replica Set(RS)  으로 만드는 방법
  6. mongos 와 복수의 mongos 운영 전략
  7. 단일 샤드로 운영하기 (Config server 생성, Replica set)
  8. Replica Set으로 된 샤드 추가하기
  9. Arbiter Server 와 투표 알고리즘에 대해
  10. AWS 를 이용한 실제 구축
  11. node.js 에서 실제 접속해 보기(단일 서버, 레플리카 셋, 단일 샤드, 복수샤드에서의 운영방법)