저자는 COVID-19 구호 기금을 기부를 위한 글쓰기 프로그램의 일환으로 선택했습니다.
소개
MongoDB는 가장 인기 있는 NoSQL 데이터베이스 엔진 중 하나입니다. 확장 가능하고 견고하며 신뢰할 수 있으며 사용하기 쉽다는 것으로 유명합니다. 이 기사에서는 샘플 MongoDB 데이터베이스를 백업, 복원 및 이전하는 방법을 알아볼 것입니다.
데이터베이스를 가져오고 내보내는 것은 다른 소프트웨어 제품과 호환되는 인간이 읽을 수 있는 형식의 데이터를 처리하는 것을 의미합니다. 반면에 MongoDB의 백업 및 복원 작업은 MongoDB 전용 이진 데이터를 생성하거나 사용하여 데이터의 일관성과 무결성뿐만 아니라 특정 MongoDB 속성도 보존합니다. 따라서 이전에는 소스 및 대상 시스템이 호환되는 경우 백업 및 복원을 사용하는 것이 보통 더 선호됩니다.
전제 조건
이 튜토리얼을 따르기 전에 다음 사전 준비 사항을 완료했는지 확인하십시오:
- sudo 비루트 사용자와 방화벽이 구성된 Ubuntu 20.04 서버, 이를 설정하는 방법은 Ubuntu 20.04 초기 서버 설정 안내서를 참조하십시오.
- MongoDB가 설치되고 구성되어 있으며 Ubuntu 20.04에 MongoDB 설치하기 튜토리얼을 사용하여 설정되었는지 확인하십시오.
- 예제 MongoDB 데이터베이스가 MongoDB 데이터베이스 가져오고 내보내기하는 방법의 지침에 따라 가져오기되었는지 확인하십시오.
그렇지 않은 경우, 이 튜토리얼에서 관리자 권한이 필요한 모든 명령은 sudo 권한을 가진 비루트 사용자로 실행해야 합니다.
단계 1 — MongoDB에서 JSON과 BSON 사용하기
이 기사를 계속하기 전에 주제에 대한 기본적인 이해가 필요합니다. Redis와 같은 다른 NoSQL 데이터베이스 시스템에 경험이 있다면 MongoDB 작업 시 유사성을 찾을 수 있습니다.Redis와 같은 NoSQL 데이터베이스 시스템에 경험이 있다면 MongoDB 작업 시 유사성을 찾을 수 있습니다.
몽고디비는 정보를 저장하기 위해 JSON 및 BSON(이진 JSON) 형식을 사용합니다. JSON은 내보내기 및 최종적으로 데이터를 가져오기에 완벽한 인간이 읽을 수 있는 형식입니다. JSON을 지원하는 간단한 텍스트 편집기를 포함한 도구로 내보낸 데이터를 추가로 관리할 수 있습니다.
다음은 .json
문서의 예시입니다:
{"address":[
{"building":"1007", "street":"Park Ave"},
{"building":"1008", "street":"New Ave"},
]}
JSON은 사용하기 편리하지만 BSON에서 사용 가능한 모든 데이터 유형을 지원하지는 않습니다. 이는 JSON을 사용하면 정보의 ‘정보 손실’이 발생할 수 있음을 의미합니다. 백업 및 복원에는 이진 BSON을 사용하는 것이 좋습니다.
두 번째로, 명시적으로 몽고디비 데이터베이스를 생성할 필요가 없습니다. 가져오기용으로 지정한 데이터베이스가 이미 존재하지 않는 경우 자동으로 생성됩니다. 컬렉션(데이터베이스 테이블) 구조의 경우에도 이와 유사합니다. 다른 데이터베이스 엔진과 달리, 몽고디비에서는 첫 번째 문서(데이터베이스 행) 삽입 시 구조가 자동으로 생성됩니다.
세 번째로, 몽고디비에서 대량의 데이터를 읽거나 삽입하는 것은 자원이 많이 필요하며 CPU, 메모리 및 디스크 공간을 많이 소비할 수 있습니다. 이는 몽고디비가 대형 데이터베이스 및 빅 데이터에 자주 사용되기 때문에 중요합니다. 이 문제에 대한 가장 간단한 해결책은 밤이나 최소 피크 시간 동안 내보내기 및 백업을 실행하는 것입니다.
네번째, 정보 일관성은 데이터베이스 내보내기 또는 백업 프로세스 중에 정보가 변경되는 바쁜 MongoDB 서버에서 문제가 될 수 있습니다. 이 문제에 대한 하나의 가능한 해결책은 MongoDB 주제를 심화할 때 고려할 수 있는 복제입니다.
데이터를 백업하고 복원하기 위해 가져오기 및 내보내기 기능을 사용할 수 있지만, MongoDB 데이터베이스의 완전한 무결성을 보장하는 더 좋은 방법이 있습니다. 데이터를 백업하려면 mongodump
명령을 사용해야 합니다. 복원하려면 mongorestore
를 사용하십시오. 이들이 어떻게 작동하는지 살펴봅시다.
mongodump
를 사용하여 MongoDB 데이터베이스 백업하기 – 단계 2
우선 MongoDB 데이터베이스를 백업하는 방법에 대해 알아보겠습니다.
중요한 mongodump
인수 중 하나는 백업하려는 데이터베이스의 이름을 지정하는 --db
입니다. 데이터베이스 이름을 지정하지 않으면 mongodump
는 모든 데이터베이스를 백업합니다. 두 번째 중요한 인수는 데이터가 덤프될 디렉터리를 정의하는 --out
입니다. 예를 들어, newdb
데이터베이스를 백업하고 /var/backups/mongobackups
디렉터리에 저장합니다. 이상적으로 각 백업을 현재 날짜와 함께 디렉터리에 저장합니다. 예를 들어 /var/backups/mongobackups/10-29-20
.
먼저 /var/backups/mongobackups
디렉터리를 만듭니다:
그런 다음 mongodump
를 실행합니다:
다음과 같은 출력이 표시됩니다:
Output2020-10-29T19:22:36.886+0000 writing newdb.restaurants to
2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)
위 디렉터리 경로에서 date +'%m-%d-%y'
를 사용하여 현재 날짜를 자동으로 가져옵니다. 이렇게 하면 /var/backups/10-29-20/
와 같은 디렉터리 내에 백업을 보유할 수 있어 백업 자동화에 특히 편리합니다.
이 시점에서 newdb
데이터베이스의 완전한 백업이 /var/backups/mongobackups/10-29-20/newdb/
디렉터리에 있습니다. 이 백업에는 newdb
를 올바르게 복원하고 그 일종의 “신뢰성”을 보존하는 데 필요한 모든 것이 포함되어 있습니다.
일반적인 규칙으로 정기적인 백업을 만드는 것이 좋습니다. 가능하면 서버 부하가 가장 적을 때 이를 수행하십시오. 따라서 mongodump
명령을 cron 작업으로 설정하여 정기적으로 실행하십시오. 예를 들어 매일 오전 03:03에 실행할 수 있습니다.
이를 위해 cron의 편집기인 crontab
을 엽니다.
sudo crontab
을 실행하면 루트 사용자의 cron 작업을 편집하게 됩니다. 이것은 권장되는 방법입니다. 왜냐하면 사용자에 대한 cron을 설정하면 sudo 프로필이 비밀번호 확인을 요구하는 경우 특히 제대로 실행되지 않을 수 있기 때문입니다.
크론탭 프롬프트 안에 다음 mongodump
명령어를 삽입하십시오:
위 명령에서 --db
인수를 명시적으로 제외하는 이유는 일반적으로 모든 데이터베이스를 백업하려고하기 때문입니다. 또한 크론 구문을 준수하기 위해 특수 문자 %
를 이스케이프해야 합니다.
당신의 MongoDB 데이터베이스 크기에 따라서는 너무 많은 백업으로 인해 곧 디스크 공간이 부족해질 수 있습니다. 이것이 왜 이전 백업을 정기적으로 정리하거나 압축하는 것이 권장되는 이유입니다.
예를 들어, 일주일 이전의 모든 백업을 삭제하려면 다음 bash 명령을 사용할 수 있습니다:
이전 mongodump
명령어와 유사하게 이것도 크론 작업으로 추가할 수 있습니다. 다음 백업을 시작하기 직전에 실행되어야 합니다. 예를 들어, 03:03 AM 작업에 대해 이 삭제 작업은 03:01 AM에 실행됩니다. 크론탭을 다시 엽니다:
다음 줄을 삽입하십시오:
파일을 저장하고 닫으십시오.
이 단계에서 모든 작업을 완료하면 MongoDB 데이터베이스에 대한 적절한 백업 솔루션이 보장됩니다. 다음으로 데이터베이스를 복원할 것입니다.
단계 3 — mongorestore
를 사용하여 MongoDB 데이터베이스를 복원하고 이동합니다.
이전 백업에서 MongoDB 데이터베이스를 복원하면 특정 시간에 촬영된 MongoDB 정보의 정확한 사본을 얻게됩니다. 이 정보에는 모든 인덱스 및 데이터 유형이 포함되어 있으며 특히 MongoDB 데이터베이스를 마이그레이션하려는 경우 유용합니다. MongoDB를 복원하려면 mongorestore
명령을 사용합니다. 이 명령은 mongodump
가 생성한 이진 백업과 함께 작동합니다.
newdb
데이터베이스를 사용하여 이전에 가져온 백업에서 복원하는 방법을 살펴보겠습니다. 먼저 --nsInclude
인수로 데이터베이스의 이름을 지정합니다. 모든 컬렉션을 복원하려면 newdb.*
를 사용합니다. restaurants
와 같은 단일 컬렉션을 복원하려면 newdb.restaurants
를 대신 사용합니다.
그런 다음 --drop
을 사용하여 대상 데이터베이스가 먼저 삭제되어 백업이 깨끗한 데이터베이스에 복원되도록합니다. 마지막 인수로 마지막 백업의 디렉토리를 지정합니다. 이 디렉토리는 다음과 같이 보일 것입니다: /var/backups/mongobackups/10-29-20/newdb/
.
타임 스탬프가 지정된 백업이 있다면 다음 명령을 사용하여 복원할 수 있습니다 (날짜를 자신의 것과 일치하도록 업데이트합니다):
다음과 같은 출력이 표시됩니다:
Output2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir
2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json
2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson
2020-10-29T19:25:46.130+0000 no indexes to restore
2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents)
2020-10-29T19:25:46.130+0000 done
위의 경우에는 백업을 생성한 서버와 동일한 서버에 데이터를 복원합니다. 데이터를 다른 서버로 이전하고 동일한 기술을 사용하려면 백업 디렉터리를 복사해야 합니다. 이 경우에는 /var/backups/mongobackups/10-29-20/newdb/
입니다.
결론
이제 MongoDB 데이터베이스를 백업, 복원 및 이전하는 데 필요한 몇 가지 중요한 작업을 수행했습니다. 여기서 설명한 것과 같이 신뢰할 수 있는 백업 전략 없이는 본 산업용 MongoDB 서버가 작동해서는 안 됩니다.
더 많은 MongoDB 구성 및 사용 방법에 대한 자습서는 이 DigitalOcean 커뮤니티 기사에서 찾을 수 있습니다. 또한 MongoDB가 제공하는 가능성에 대한 훌륭한 자료로 MongoDB 문서를 확인할 것을 권장합니다.