MongoDB 데이터베이스 백업 및 복원 방법

MongoDB 데이터베이스 백업 및 복원 방법

Python
MongoDB 데이터베이스 백업 및 복원 방법
Author

gabriel yang

Published

October 5, 2024


MongoDB는 비관계형(NoSQL) 데이터베이스로, 대규모 데이터를 효율적으로 저장하고 관리하는 데 강력한 성능을 자랑합니다. 하지만 중요한 데이터를 다루는 만큼 정기적인 백업(Backup)과 필요시 복원(Restore) 작업이 필수적입니다.

1. MongoDB 백업 방법

MongoDB에서 데이터베이스를 백업하는 방법은 여러 가지가 있지만, 기본적으로 많이 사용되는 방법은 mongodump를 이용한 방법입니다. 이 도구는 MongoDB 데이터를 BSON(Binary JSON) 형식으로 내보내며, 이를 통해 데이터베이스의 특정 컬렉션 또는 전체 데이터베이스를 백업할 수 있습니다.

1) mongodump를 사용한 백업

mongodump는 MongoDB의 기본 제공 유틸리티로, 손쉽게 데이터베이스의 백업을 생성할 수 있습니다. 기본적인 사용법은 다음과 같습니다.

1-1) 전체 데이터베이스 백업

MongoDB 인스턴스에서 실행 중인 모든 데이터베이스를 백업하려면, 다음 명령어를 사용합니다.

mongodump --uri "mongodb://localhost:27017"

위 명령어는 로컬 MongoDB 서버의 모든 데이터베이스를 dump/라는 디렉토리로 백업합니다.

1-2) 특정 데이터베이스 백업

특정 데이터베이스만 백업하려면 --db 옵션을 사용하여 백업할 데이터베이스를 지정할 수 있습니다.

mongodump --uri "mongodb://localhost:27017" --db mydatabase

이 명령어는 mydatabase 데이터베이스만 백업합니다.

1-3) 특정 컬렉션 백업

데이터베이스 내의 특정 컬렉션만 백업하고 싶다면, --collection 옵션을 사용할 수 있습니다.

mongodump --uri "mongodb://localhost:27017" --db mydatabase --collection mycollection

이 명령어는 mydatabasemycollection 컬렉션만 백업합니다.

1-4) 백업 경로 지정

백업 파일을 특정 경로에 저장하려면 --out 옵션을 사용합니다. 다음 명령어는 backup/ 디렉토리에 백업 데이터를 저장합니다.

mongodump --uri "mongodb://localhost:27017" --out /path/to/backup

이처럼 mongodump는 직관적인 명령어로 데이터를 백업할 수 있는 유용한 도구입니다.

2) 파일 기반 백업

MongoDB는 데이터를 WiredTiger 스토리지 엔진을 사용하여 관리합니다. 이 엔진은 데이터베이스 파일을 dbPath 경로에 저장하므로, MongoDB 서버가 중단된 상태에서 해당 경로의 데이터를 백업할 수 있습니다.

  1. MongoDB 서버를 중단합니다:

    sudo systemctl stop mongod
  2. dbPath 디렉토리의 파일을 복사하여 백업합니다:

    cp -r /var/lib/mongodb /path/to/backup
  3. MongoDB 서버를 다시 시작합니다:

    sudo systemctl start mongod

이 방법은 서버를 중단한 상태에서 수행해야 하므로, 실시간 백업이 필요한 환경에서는 권장되지 않습니다.

2. MongoDB 데이터베이스 복원 방법

MongoDB에서 백업한 데이터를 복원할 때는 주로 mongorestore 명령어를 사용합니다. 이 도구는 mongodump로 생성한 BSON 형식의 백업 파일을 MongoDB로 다시 불러옵니다.

1) mongorestore를 사용한 복원

1-1) 전체 데이터베이스 복원

전체 데이터베이스를 복원하려면, 백업 파일이 있는 경로를 지정하여 복원할 수 있습니다.

mongorestore --uri "mongodb://localhost:27017" /path/to/backup

이 명령어는 /path/to/backup 경로에 있는 모든 데이터베이스 백업을 MongoDB 서버에 복원합니다.

1-2) 특정 데이터베이스 복원

특정 데이터베이스만 복원하려면 --db 옵션을 사용하여 복원할 데이터베이스를 지정합니다.

mongorestore --uri "mongodb://localhost:27017" --db mydatabase /path/to/backup/mydatabase

이 명령어는 mydatabase 데이터베이스의 백업을 복원합니다.

1-3) 특정 컬렉션 복원

특정 컬렉션만 복원할 수 있으며, --collection 옵션을 사용합니다.

mongorestore --uri "mongodb://localhost:27017" --db mydatabase --collection mycollection /path/to/backup/mydatabase/mycollection.bson

이 명령어는 mydatabasemycollection 컬렉션만 복원합니다.

1-4) 덮어쓰기 복원

기존 데이터베이스 또는 컬렉션을 덮어쓰려면 --drop 옵션을 사용합니다. 이 옵션은 복원하기 전에 기존 데이터를 삭제합니다.

mongorestore --uri "mongodb://localhost:27017" --db mydatabase --drop /path/to/backup/mydatabase

이 명령어는 mydatabase를 복원하기 전에 기존 데이터베이스를 삭제하고, 백업 데이터를 다시 복원합니다.

2) 파일 기반 복원

파일 기반 백업을 복원하려면 MongoDB 서버를 중단한 후, 백업 파일을 dbPath로 복사한 다음 다시 서버를 시작하면 됩니다.

  1. MongoDB 서버를 중단합니다:

    sudo systemctl stop mongod
  2. 백업된 파일을 원래 경로로 복사합니다:

    cp -r /path/to/backup /var/lib/mongodb
  3. MongoDB 서버를 다시 시작합니다:

    sudo systemctl start mongod

파일 기반 복원은 매우 간단하지만, 실시간 데이터 변경 사항을 반영하지 못하므로 주의가 필요합니다.

3. 자동화된 백업 및 복원

수동으로 백업 및 복원 작업을 수행할 수 있지만, 일정 주기로 자동화하는 것이 중요합니다. 이를 위해 cron 작업을 설정하거나, MongoDB Atlas와 같은 관리형 클라우드 서비스를 이용해 자동 백업을 설정할 수 있습니다.

1) cron을 사용한 백업 자동화

다음은 mongodump를 매일 자정에 실행하도록 cron 작업을 설정하는 예시입니다.

  1. crontab 편집:

    crontab -e
  2. 다음 라인을 추가하여 매일 자정에 백업을 수행합니다:

    0 0 * * * mongodump --uri "mongodb://localhost:27017" --out /path/to/backup/daily_backup

2) MongoDB Atlas의 백업 기능

MongoDB Atlas는 자동 백업 및 복원 기능을 제공하는 클라우드 기반 서비스입니다. Atlas는 주기적인 백업과 간편한 복원 기능을 제공하여 관리 부담을 줄여줍니다. MongoDB Atlas의 백업 기능은 기본적으로 클러스터를 구성할 때 함께 제공되며, 대시보드를 통해 간편하게 설정할 수 있습니다.

결론

MongoDB의 데이터 백업과 복원은 데이터 무결성을 유지하고 시스템 장애에 대비하는 중요한 과정입니다. mongodumpmongorestore 도구를 사용하면 간단하고 효율적으로 데이터를 백업하고 복원할 수 있으며, 추가적으로 파일 기반 백업이나 클라우드 서비스를 통한 자동화 기능도 활용할 수 있습니다. 백업 전략을 적절하게 구성하여 데이터를 안전하게 보호하고, 필요시 빠르게 복구할 수 있는 환경을 마련하는 것이 중요합니다.

Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Nov 26, 2024 VSCode에서 Python 디버깅 (launch.json 설정) gabriel yang
Nov 23, 2024 Python 설치된 패키지 확인, 설치와 복원하기 gabriel yang
Oct 14, 2024 JSON 파일에서 특정 key의 값 변경 후 저장하는 방법 gabriel yang
Oct 10, 2024 날짜 문자열을 날짜 형식으로 변환하기 gabriel yang
Oct 8, 2024 Request를 통한 JIRA REST API 사용방법 gabriel yang
Oct 8, 2024 Request 라이브러리 사용방법 gabriel yang
Oct 8, 2024 Requests 라이브러리로 베이직 인증 API 호출하기 gabriel yang
Oct 7, 2024 Python으로 SSH를 제어하기 gabriel yang
Oct 7, 2024 Pytest로 테스트하기 gabriel yang
Oct 7, 2024 Pytest 기본적인 테스트 실행 방법 gabriel yang
Oct 7, 2024 Pytest Fixture 개념과 필요성 gabriel yang
Oct 7, 2024 CI 환경에서 Pytest 사용하기 gabriel yang
Oct 7, 2024 파이썬에서 테스트 코드 리팩토링 기법 gabriel yang
Oct 5, 2024 Python os 모듈을 이용한 파일과 폴더 관리 gabriel yang
Oct 5, 2024 Python shutil 모듈을 이용한 파일과 폴더 관리 gabriel yang
Oct 5, 2024 Python jira 라이브러리를 이용해 JIRA를 관리하는 방법 gabriel yang
Oct 4, 2024 Python에서 JSON 파일 읽기 및 데이터 활용 gabriel yang
Oct 4, 2024 JSON 데이터 수정하기 gabriel yang
Oct 4, 2024 JSON 파일의 구성요소와 구조 gabriel yang
Oct 4, 2024 Python에서 Git명령 사용하기 gabriel yang
Oct 3, 2024 파이썬으로 클래스 정의하는 방법 gabriel yang
Oct 3, 2024 파이썬의 상속(Inheritance) 이해하기 gabriel yang
Oct 3, 2024 파이썬 클래스의 self 이해하기 gabriel yang
Oct 3, 2024 파이썬에서 추상 클래스(Abstract Class) 사용하기 gabriel yang
Oct 3, 2024 파이썬 클래스 활용 예시 gabriel yang
Oct 3, 2024 파이썬 클래스와 모듈 gabriel yang
Oct 3, 2024 파이썬에서 Lock을 사용하는 이유와 방법 gabriel yang
Oct 2, 2024 Python에서 zip()을 사용하는 이유와 방법 gabriel yang
Oct 2, 2024 파이썬 시퀀스 슬라이싱 gabriel yang
Oct 2, 2024 파이썬에서 Generator를 사용하는 이유와 사용법 gabriel yang
Oct 2, 2024 파이썬의 @property 기능 gabriel yang
Oct 2, 2024 파이썬 시퀀스 언패킹 gabriel yang
Oct 2, 2024 파이썬 데이터 정렬 gabriel yang
Oct 2, 2024 파이썬 딕셔너리 key 예외처리하기 gabriel yang
Oct 2, 2024 파이썬의 defaultdict 사용법 gabriel yang
Oct 2, 2024 파이썬의 try-except 사용법 gabriel yang
Oct 2, 2024 파이썬의 클로저(Clsure) 사용법 gabriel yang
Oct 2, 2024 파이썬의 가변인자 사용법 gabriel yang
Oct 2, 2024 파이썬의 컴프리헨션(Comprehension) 사용법 gabriel yang
Oct 1, 2024 파이썬 가상환경 설정 gabriel yang
Oct 1, 2024 파이썬을 이용한 테스트 자동화 gabriel yang
Oct 1, 2024 파이썬 docstring을 사용하는 이유와 방법 gabriel yang
Oct 1, 2024 파이썬 yield 제너레이터와 효율적인 반복 처리 gabriel yang
Oct 1, 2024 파이썬 데이터 언패킹 gabriel yang
Oct 1, 2024 Python에서 enumerate를 사용하는 이유와 사용 방법 gabriel yang
Sep 30, 2024 Python 설치 및 기본 파이썬 버전 설정 gabriel yang
Sep 30, 2024 Python을 이용한 폴더 전체 복사 방법 gabriel yang
Sep 30, 2024 Public Key와 Private Key의 역할 gabriel yang
Sep 23, 2024 Python의 @dataclass 데코레이터 gabriel yang
Aug 30, 2024 Python shell명령 수행하기 (Subprocess) gabriel yang
Aug 29, 2024 Google Colab에서 라이브러리 설치하기 gabriel yang
Aug 1, 2024 환경변수 설정하고 Python에서 읽어오기 gabriel yang
Jan 1, 2024 코루틴(coroutine)과 이벤트 루프 gabriel yang
No matching items
Back to BLOG LIST