Mongodb 증분 백업


26

시작점으로 MongoDB 복제 세트에 대한 증분 백업을 설정하는 작업이 제공되었지만 물론 Google 검색에서 MongoDB 문서에서 아무것도 찾을 수 없었지만 Stack Overflow 에서이 질문 을 찾았습니다. Tayra는 매우 활동적이지 않았습니다.

나는 oplog로그를 재생할 무언가를 개발하는 것이 매우 쉽다는 것을 알고 깨달았지만 나도 그렇게 할 필요가 없었 mongorestore습니다.

이제 bash 스크립트를 사용하는 작업 솔루션이 있으며 매우 쉬웠습니다. 논리에 결함이 있거나 미래에 저를 물릴 수있는 부분이 있는지 묻는 이유입니다.

내가 어떻게 구현했는지 아래에서 :

전체 백업 절차

  1. 보조 멤버에 대한 쓰기 잠금 db.fsyncLock()
  2. 스냅 샷 찍기
  3. oplog에서 마지막 위치 기록

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. 쓰기 잠금 해제 db.fsyncUnlock()

증분 백업 절차

  1. 보조 멤버에 대한 쓰기 잠금
  2. 전체 (또는 최신 증분) 백업에서 기록 된 oplog 위치에서 oplog를 덤프하십시오.

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
    
  3. 최신 oplog 위치 기록 (전체 백업과 동일)

  4. 쓰기 잠금 해제

전체 백업 복원 절차

  1. 의 모든 인스턴스를 중지 mongod
  2. 기본이 될 것입니다 상자의 데이터 디렉토리에 스냅 샷 복사를 제외하고 모두 제외 확인 local*하고 mongod.lock 이 복원 기술이라고 거울이 파손 재구성을
  3. 기본 시작
  4. 복제 세트 재구성
  5. 데이터없이 보조를 시작하면 초기 동기화를 수행 할 수 있습니다. 또는 새로운 local데이터베이스 를 사용하여 새 기본 데이터베이스 의 데이터를 복사하십시오.

증분 백업 복원

증분 백업을 만들면 다음과 같이 저장됩니다.

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

우리는 익숙해 oplog.rs.bson졌지만 이름을 바꿔야하므로 다음 단계가 있습니다.

  1. 디렉토리를 백업으로 변경하십시오. cd /mnt/mongo-test_backup/1/local
  2. json 파일을 삭제하십시오. rm *.json
  3. bson 파일의 이름을 바꾸십시오 mv oplog.rs.bson oplog.bson
  4. 그것을 복원하십시오 :

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

나는 모든 스크립트를 가지고 있으며 나중에 GitHub에서 커밋 할 수 있습니다.

문제는 논리에 결함이 있는지 여부입니다. 절차가 매우 간단하고 여전히 문서화 된 곳을 찾을 수 없기 때문에 조금 의심 스럽습니다.


2
어떤 버전의 몽고를 사용하고 있습니까? wiredtiger를 사용하는 경우 db.fsyncLock ()에서 참조한 첫 번째 항목이 문제입니다. MongoDB Inc는 "WiredTiger를 사용하면 잠금 옵션이있는 fsync 명령으로 데이터 파일이 변경되지 않는다고 보장 할 수 없습니다. 결과적으로 백업 작성을 위해 일관성을 유지하기 위해이 방법을 사용하지 마십시오." 링크
— SDillon

1
@SDillon은 3.0.4를 사용하지만 WiredTiger를 사용하지는 않습니다. 잠금 쓰기 대신 mongod를 모두 중지해야합니다. 페어 포인트 감사합니다
— Tiago

나는 증분 백업에 대한 다음과 같은 도구를 발견 github.com/EqualExperts/Tayra는 이 의지의 도움을 희망
— 아마드 Abuhasna

1
"버전 3.2으로 변경 : lock 옵션을 사용하는 fsync 명령은 MMAPv1 또는 WiredTiger 스토리지 엔진을 사용하여 MongoDB 인스턴스의 데이터 파일이 변경되지 않도록하여 백업을 작성하기위한 일관성을 제공합니다."
— 안전성

증분 백업을 수행하는 일반적이고 가장 쉬운 방법은 LVM 및 스냅 샷을 사용하는 것입니다. docs.mongodb.com/manual/tutorial/…
— JJussi

답변:


3

귀하의 질문에 대답하십시오. 아니! 당신의 논리에는 실패가 없으며 문제없이 작동해야합니다. 그러나 LVM 스냅 샷을 사용할 수있는 경우 백업을 수행하는 것이 좋습니다.


LVM 스냅 샷의 증분 백업은 어떻게합니까? 감사!
— TanisDLJ

LVM 스냅 샷은 기본적으로 증분입니다. 스냅 샷은 순간이며 변경 사항 만 기록됩니다.
— JJussi

스냅 샷 만 찍으면 증분됩니다. 그러나 스냅 샷을 아카이브하면 전체 백업입니다. 예를 들어, 이중화와 같이 다른 증분 백업을 아카이브 할 수 없습니다. 또한 증분 백업을 위해 30 분마다 스냅 샷 생성을 시작할 수 없으므로 성능이 크게 저하 될 수 있습니다.
— TanisDLJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.