MongoD 블로그 수정 및 재생
MongoD 블로그를 수정하고 재생할 수 있습니까?
버그로 인해 업데이트가 예상보다 많은 문서에 적용되어 일부 데이터를 덮어씁니다.백업에서 데이터를 복구하고 다시 통합했기 때문에 실제로 손실된 것은 없지만, oplog를 수정하여 문제가 되는 업데이트를 제거하거나 수정하여 다시 재생할 수 있는 방법이 있는지 궁금합니다.
저는 MongoDB 내부에 대한 심층적인 지식이 없기 때문에 "당신은 그것이 어떻게 작동하는지 이해하지 못합니다, 이것과 같습니다"라는 식의 유익한 답변도 수락을 위해 고려될 것입니다.
애플리케이션 또는 인적 오류 데이터 손상에서 가장 큰 문제 중 하나는 문제가 되는 주 쓰기가 보조 쓰기로 즉시 복제된다는 것입니다.
이것이 사용자가 고정된 시간 지연으로 보조 노드 중 하나를 실행하는 옵션인 "슬레이브 지연"을 사용하는 이유 중 하나입니다(물론 보조 노드의 지연보다 짧은 시간 동안 오류 또는 버그를 발견한 경우에만 도움이 됩니다).
이러한 설정이 없는 경우 백업을 사용하여 버그 이전 상태로 복원해야 하는 레코드의 상태를 재생성해야 합니다.
모든 작업을 별도의 독립 실행형 데이터 복사본에서 수행합니다. 모든 작업이 제대로 재생성되었는지 확인한 후에는 수정된 데이터를 프로덕션 시스템으로 이동해야 합니다.
이를 위해 필요한 것은 백업의 최근 복사본(예: 백업이 X시간 경과되었다고 가정)이며 클러스터의 oplog에는 X시간 이상의 데이터가 저장되어 있어야 합니다.(a) 복제본 집합의 모든 구성원이 oplog의 내용이 같고 (b) 다른 노드 구성원에서 oplog 크기가 다를 수 있기 때문에 "가장 큰" 노드를 확인하려고 하기 때문에 어떤 노드의 oplog를 지정하지 않았습니다.
최근 백업이 52시간이 지났지만 다행히 75시간 분량의 데이터를 저장하는 oplog가 있다고 가정해 보겠습니다.
모든 노드(기본 노드 및 보조 노드)에 "불량" 데이터가 있다는 사실을 이미 알고 있었으므로 가장 최근의 백업을 새 mongod로 복원하는 것이 좋습니다.여기서 이러한 레코드를 문제가 되는 업데이트 직전의 상태로 복원합니다. 그런 다음 해당 레코드를 현재 기본 상태로 이동하여 모든 보조 상태로 복제할 수 있습니다.
백업을 복원하는 동안 다음 명령을 사용하여 oplog 컬렉션의 mongodump를 생성합니다.
mongodump -d local -c oplog.rs -o oplogD
oplog를 자체 디렉터리로 이동하여 이름을 tooplog.bson으로 변경합니다.
mkdir oplogR
mv oplogD/local/oplog.rs.bson oplogR/oplog.bson
이제 "위반" 작업을 찾아야 합니다.이 읽을 수 수 . opplog를 사용합니다.bsondump
대한 을 사용하여 "opplogR/opplog.bson 파일에는 "잘못된" 업데이트가 포함됩니다.또는 다음을 통해 복제본 세트의 원본 oplog에 대해 쿼리할 수 있습니다.use local
그리고.db.oplog.rs.find()
명령을 입력합니다.
이이 항목의 내용을 메모하는 것입니다.ts
밭.밭.
다음과 같이 표시될 수 있습니다.
"ts" : Timestamp( 1361497305, 2789 )
로 고는 다음과 .mongorestore
에는 두 옵션이 . 는 명에는두옵있습다니션이가지령,다있▁command습▁called니▁has▁options▁two▁one입니다. 하나는 다음과 같습니다.--oplogReplay
그리고 다른 한 사람은.oplogLimit
이제 복원된 독립 실행형 서버에서 이 oplog를 재생하지만 이 문제를 일으키는 업데이트 작업 전에 중지합니다.
명령은 다음과 같습니다(호스트 및 포트는 새로 복원된 백업 위치).
mongorestore -h host --port NNNN --oplogReplay --oplogLimit 1361497305:2789 oplogR
이렇게 하면 ts 값 Timestamp(1361497305, 2789)가 있는 항목 바로 앞에서 중지되는 oplogR 디렉토리의 oplog.bson 파일에서 각 작업이 복원됩니다.
별도의 인스턴스에서 이 작업을 수행한 이유는 생성된 올바른 데이터를 복원하고 재생할 수 있는지 확인하기 위해서입니다. 데이터를 확인한 후에는 복원된 레코드를 실제 기본 위치에 쓸 수 있습니다. 복제를 통해 수정된 레코드를 보조 인스턴스에 전파할 수 있습니다.
언급URL : https://stackoverflow.com/questions/15444920/modify-and-replay-mongodb-oplog
'programing' 카테고리의 다른 글
목록을 올바르게 사용하는 방법 (0) | 2023.05.13 |
---|---|
Base64 이미지를 HTML로 표시하는 방법 (0) | 2023.05.13 |
배치 또는 cmd 파일을 통해 서비스를 중지하고 시작하시겠습니까? (0) | 2023.05.08 |
Excel 프로그래밍 시 선택 항목을 없음으로 설정 (0) | 2023.05.08 |
Git 워크플로우 및 기본 재배치 대 병합 질문 (0) | 2023.05.08 |