MongoDB 백업

Olivia·2025년 6월 20일
1

[소소한 꿀팁]

목록 보기
11/11

meme이랑 비슷한 상황,,
클라우드에 올린 클러스터들이 많아서 비용문제로 인해 클러스터 삭제가 필요했다.
이에따라 DB 데이터를 백업해야하는 상황.

현재 MongoDB를 사용하고 있으므로, MongoDB 데이터를 안전하게 백업하는 방법에 대해서 정리하겠다.


1. 파드 상태 확인

실행 중인 MongoDB 파드를 확인해야한다.

kubectl get pods -A

2. 파드에 접속해 데이터 확인

MongoDB 파드에 접속해서 실제로 데이터가 있는지 확인한다.

# 파드 접속
kubectl exec -it [mongoDB파드 이름] -n [네임스페이스] -- bash

# MongoDB 접속 및 데이터 확인
mongo
> show dbs
> use [db이름]
> show collections
> db.resources.count()
> exit
> exit

3. mongodump로 데이터 백업

MongoDB의 mongodump 명령어를 사용해 모든 데이터를 BSON 형식으로 백업

kubectl exec -it [파드이름] -n [네임스페이스] -- mongodump --out /tmp/backup

BSON 형식으로 백업하는 이유

  • 데이터 타입 무손실
    - ObjectId, Date, NumberLong, Binary, Decimal128 등 모든 MongoDB 타입 보존
    - 인덱스 정보도 함께 백업됨

  • 빠른 복원 속도
    - 바이너리 형식이라 복원이 매우 빠름
    - 대용량 데이터에서 특히 효과적

JSON 형식의 한계

  • ObjectId가 문자열로 변환되어 원본과 달라짐
  • Date 타입이 ISO 문자열로 변환
  • 복원 시 타입 변환 문제 발생 가능
  • 인덱스 정보 손실

4. 백업 파일 확인

# 백업 디렉토리 확인
kubectl exec -it [파드이름] -n [네임스페이스] -- ls -la /tmp/backup/

# 백업 크기 확인
kubectl exec -it [파드이름] -n [네임스페이스] -- du -sh /tmp/backup/

5. 백업 파일 압축

네트워크 전송을 위해 백업 파일 압축 필요

# 파드 내에서 압축
kubectl exec -it [파드이름] -n [네임스페이스] -- tar -czf /tmp/mongodb-backup.tar.gz -C /tmp backup

# 압축 파일 크기 확인
kubectl exec -it [파드이름] -n [네임스페이스] -- ls -lh /tmp/mongodb-backup.tar.gz

6. 로컬로 백업 파일 복사

kubectl cp 명령어를 사용해 압축된 백업 파일을 로컬로 복사합니다.

# 로컬로 복사 (현재 디렉토리에 날짜별로 저장)
kubectl cp [네임스페이스]/[파드이름]:/tmp/mongodb-backup.tar.gz ./mongodb-backup-$(date +%Y%m%d-%H%M%S).tar.gz

7. 로컬에서 압축 해제 및 내용 확인

# 복사된 파일 확인
ls -lh mongodb-backup-*.tar.gz

# 압축 해제
tar -xzf mongodb-backup-*.tar.gz

# 백업 내용 확인
ls -la backup/

백업된 파일 구조

backup/
├── admin/
│   ├── system.version.bson
│   └── system.version.metadata.json
└── [db이름]/
    ├── accounts.bson
    ├── accounts.metadata.json
    ├── resources.bson
    ├── resources.metadata.json
    ├── events.bson
    ├── events.metadata.json
    └── ... (기타 컬렉션들)

각 MongoDB 컬렉션마다 두 개의 파일이 생성된다.

  • .bson 파일: 실제 데이터 (바이너리 형식)
  • .metadata.json 파일: 인덱스 및 컬렉션 설정 정보

8. 데이터 복원 방법 (참고)

나중에 새로운 MongoDB 인스턴스에서 데이터를 복원할 때를 대비해 미리 작성

# 백업 파일을 새 파드로 복사
kubectl cp ./backup [네임스페이스]/[새로운 파드 이름]:/tmp/restore-backup

# 데이터 복원
kubectl exec -it [새로운 파드 이름] -n [네임스페이스] -- mongorestore /tmp/restore-backup

정리

  • mongodump: MongoDB 데이터를 BSON 형식으로 완전 백업
  • 압축 전송: 네트워크 효율성을 위한 tar.gz 압축
  • kubectl cp: 쿠버네티스 파드와 로컬 간 파일 전송
  • 완전한 복원: BSON + metadata로 인덱스까지 완벽 복원 가능
profile
👩🏻‍💻

0개의 댓글