Ubuntu 18.04에서 MongoDB 데이터베이스를 백업, 복구 및 마이그레이션하는 방법

Ubuntu 18.04에서 MongoDB 데이터베이스를 백업, 복구 및 마이그레이션하는 방법

2022-06-01 last update

9 minutes reading Backups Data Analysis MongoDB Ubuntu
저자는 COVID-19 Relief FundWrite for DOnations 계획의 일부로 기부를 받았다.

소개


MongoDB은 가장 유행하는 NoSQL 데이터베이스 엔진 중의 하나입니다.그것은 확장성, 건장, 신뢰성, 사용하기 쉽기로 유명하다.이 문서에서는 MongoDB 데이터베이스를 백업, 복구 및 마이그레이션합니다.
데이터베이스를 가져오고 내보내는 것은 다른 소프트웨어 제품과 호환되는 인류가 읽을 수 있는 형식으로 데이터를 처리하는 것을 의미한다.반면 MongoDB의 백업 및 복구 작업은 MongoDB의 특정한 바이너리 데이터를 만들거나 사용합니다. 이것은 데이터의 일치성과 완전성을 보존할 뿐만 아니라 특정한 MongoDB 속성도 보존합니다.따라서 마이그레이션의 경우 소스 시스템과 타겟 시스템이 호환되는 경우 일반적으로 백업 및 복구를 사용하는 것이 좋습니다.

선결 조건


이 강좌를 배우기 전에 다음 선행 조건을 완료했는지 확인하십시오.
  • One Ubuntu 18.04 DropletUbuntu 18.04 initial server setup guide의 설정에 따라 sudo 비root 사용자와 방화벽을 포함한다.
  • 은 기사 How to Install MongoDB on Ubuntu 18.04을 사용하여 MongoDB를 설치하고 구성합니다.
  • How To Import and Export a MongoDB Database의 설명으로 가져온 MongoDB 데이터베이스 예시를 사용합니다.
  • 다른 설명이 없으면, 이 강좌에서 루트 권한이 필요한 모든 명령은sudo 권한이 있는 비루트 사용자로 실행되어야 합니다.

    1단계 - MongoDB에서 JSON 및 BSON 사용


    본문을 계속하기 전에 이 문제에 대해 기본적인 이해가 필요하다.다른 NoSQL 데이터베이스 시스템 (예: Redis) 을 사용한 경험이 있다면 MongoDB를 사용할 때 비슷한 점을 발견할 수 있습니다.
    MongoDB는 JSON 및 BSON(바이너리 JSON) 형식으로 정보를 저장합니다.JSON은 인간이 읽을 수 있는 형식으로 데이터를 내보내고 최종적으로 가져오기에 매우 적합하다.간단한 텍스트 편집기를 포함하여 JSON을 지원하는 모든 도구를 사용하여 내보낸 데이터를 더욱 관리할 수 있습니다.
    json 문서의 예는 다음과 같습니다.
    JSON 형식 예
    {"address":[
        {"building":"1007", "street":"Park Ave"},
        {"building":"1008", "street":"New Ave"},
    ]}
    
    JSON은 사용하기 편리하지만 BSON에서 사용할 수 있는 모든 데이터 형식을 지원하지 않습니다.이는 JSON을 사용할 경우 정보 신뢰성 손실이 발생할 수 있음을 의미합니다.백업 및 복구의 경우 바이너리 BSON을 사용하는 것이 좋습니다.
    그 다음으로 MongoDB 데이터베이스를 현저하게 만드는 것을 걱정할 필요가 없습니다.지정한 가져온 데이터베이스가 존재하지 않으면 자동으로 생성됩니다.집합 (데이터베이스 테이블) 구조의 상황이 더욱 좋다.다른 데이터베이스 엔진과 달리 MongoDB에서는 첫 번째 문서(데이터베이스 줄)를 삽입할 때 구조를 다시 자동으로 만듭니다.
    셋째, MongoDB에서 대량의 데이터(예를 들어 본고의 작업)를 읽거나 삽입하면 대량의 자원을 차지하고 CPU, 메모리, 디스크 공간을 소모할 수 있다.MongoDB가 대형 데이터베이스와 빅데이터에 자주 사용되는 것을 감안하면 매우 중요하다.이 문제의 가장 간단한 해결 방안은 야간이나 비러시아워에 내보내기와 백업을 실행하는 것이다.
    넷째, 바쁜 MongoDB 서버가 데이터베이스에서 내보내거나 백업하는 과정에서 정보가 바뀌면 정보 일치성에 문제가 있을 수 있습니다.이 문제의 가능한 해결 방안은 replication입니다. MongoDB 테마를 계속할 때 고려할 수 있습니다.
    import and export functions을 사용하여 데이터를 백업하고 복구할 수 있지만 MongoDB 데이터베이스의 완전성을 확보하는 더 좋은 방법이 있습니다.데이터를 백업하려면 명령 mongodump을 사용해야 합니다.복구하려면 mongorestore을 사용하십시오.어떻게 일하는지 봅시다.

    2단계 - Mongodump를 사용하여 MongoDB 데이터베이스 백업


    먼저 MongoDB 데이터베이스 백업을 소개합니다.mongodump의 중요한 매개 변수 중 하나는 --db입니다. 백업할 데이터베이스의 이름을 지정합니다.데이터베이스 이름을 지정하지 않으면 mongodump이 모든 데이터베이스를 백업합니다.두 번째 중요한 매개 변수는 --out으로 데이터를 저장하는 디렉터리를 정의합니다.예를 들어 newdb 데이터베이스를 백업하고 /var/backups/mongobackups 디렉터리에 저장합니다.이상적인 경우, 우리는 모든 백업을 현재 날짜가 /var/backups/mongobackups/10-29-20인 디렉터리에 놓을 것이다.
    먼저 디렉토리 /var/backups/mongobackups을 만듭니다.
    1. sudo mkdir /var/backups/mongobackups
    그리고 mongodump을 실행합니다.
    1. sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`
    다음과 같은 출력이 표시됩니다.
    Output
    2020-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을 올바르게 복구하고 이른바 "보호성"을 유지하는 모든 기능을 갖추고 있습니다.
    일반적으로 정기적으로 백업을 해야 합니다. 가장 좋은 것은 서버 부하가 가장 적을 때 백업을 하는 것입니다.따라서, 매일 새벽 03:03에 실행할 수 있도록 mongodump 명령을cron 작업으로 설정할 수 있습니다.
    이 열린 crontab, cron 편집기를 완성하려면:
    1. sudo crontab -e
    sudo crontab을 실행하면 루트 사용자의cron 작업을 편집합니다.사용자를 위해cron을 설정하면 올바르게 실행할 수 없습니다. 특히sudo개요 파일이 암호 검증을 필요로 하는 상황에서.
    crontab 프롬프트에 다음 mongodump 명령을 삽입합니다.
    회사 명
    3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
    
    위의 명령에서, 우리는 고의로 --db 파라미터를 생략합니다. 왜냐하면 당신은 통상적으로 모든 데이터베이스를 백업해야 하기 때문입니다.
    MongoDB 데이터베이스 크기에 따라 백업이 너무 많으면 디스크 공간이 빨리 소모될 수 있습니다.이것이 바로 정기적으로 낡은 백업을 정리하거나 압축하는 것을 건의하는 이유이다.
    예를 들어, 7일 이전 백업을 모두 삭제하려면 다음 bash 명령을 사용할 수 있습니다.
    1. find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;
    앞의 mongodump 명령과 유사하게cron 작업에 추가할 수 있습니다.그것은 다음 백업을 시작하기 전에 실행해야 합니다. 예를 들어 새벽 03:01입니다.이를 위해 crontab를 다시 열십시오.
    1. sudo crontab -e
    다음 행을 삽입합니다.
    회사 명
    3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;
    
    파일을 저장하고 닫습니다.
    이 단계의 모든 작업을 완료하면 MongoDB 데이터베이스에 적절한 백업 솔루션을 제공할 수 있습니다.

    3단계 - Mongorestore를 사용하여 MongoDB 데이터베이스 복구 및 마이그레이션


    이전 백업에서 MongoDB 데이터베이스를 복구할 때 특정 시간에 얻은 MongoDB 정보의 정확한 복사본을 가지고 있습니다. 모든 인덱스와 데이터 형식을 포함합니다.이 기능은 MongoDB 데이터베이스를 마이그레이션할 때 특히 유용합니다.MongoDB를 복구하기 위해 mongorestore 명령을 사용합니다. 이 명령은 mongodump 생성된 바이너리 백업에 사용됩니다.newdb 데이터베이스 예시를 계속하고 이전 백업에서 복구합시다.매개 변수로서 우리는 먼저 --db 매개 변수를 사용하여 데이터베이스의 이름을 지정할 것이다.그리고 --drop을 사용하면 우선 대상 데이터베이스를 삭제하여 깨끗한 데이터베이스에서 백업을 복구할 수 있도록 하겠습니다.마지막 매개 변수로 마지막 백업 디렉터리를 지정합니다. 이 디렉터리는 다음과 같습니다. /var/backups/mongobackups/10-29-20/newdb/.
    타임 스탬프 백업이 있으면 다음 명령을 사용하여 복원할 수 있습니다.
    1. sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/
    다음과 같은 출력이 표시됩니다.
    Output
    2020-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 서버도 실행해서는 안 된다.