programing

mongodb 덤프가 실패하고 DNS 메시지를 마샬링 해제할 수 없음

oldcodes 2023. 7. 13. 21:06
반응형

mongodb 덤프가 실패하고 DNS 메시지를 마샬링 해제할 수 없음

EC2 인스턴스에 설치된 mongodb 서버 버전 MongoDB 쉘 버전 v4.0.16을 사용하고 있습니다.

mongo 명령을 사용하여 인스턴스에 들어갈 수 있습니다.

mongo mongodb+srv://dxxxxxxx:xxxxxx[][]@cluster0-vxcen.gcp.mongodb.net 
MongoDB shell version v4.0.16
connecting to: mongodb://cluster0-shard-00-02-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-01-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-00-vxcen.gcp.mongodb.net.:27017/?authSource=admin&gssapiServiceName=mongodb&replicaSet=Cluster0-shard-0&ssl=true
2020-03-05T09:02:45.265+0000 I NETWORK  [js] Starting new replica set monitor for Cluster0-shard-0/cluster0-shard-00-02-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-01-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-00-vxcen.gcp.mongodb.net.:27017
2020-03-05T09:02:45.604+0000 I NETWORK  [ReplicaSetMonitor-TaskExecutor] Successfully connected to cluster0-shard-00-00-vxcen.gcp.mongodb.net.:27017 (1 connections now open to cluster0-shard-00-00-vxcen.gcp.mongodb.net.:27017 with a 5 second timeout)
2020-03-05T09:02:45.607+0000 I NETWORK  [js] Successfully connected to cluster0-shard-00-01-vxcen.gcp.mongodb.net.:27017 (1 connections now open to cluster0-shard-00-01-vxcen.gcp.mongodb.net.:27017 with a 5 second timeout)
2020-03-05T09:02:45.707+0000 I NETWORK  [js] changing hosts to Cluster0-shard-0/cluster0-shard-00-00-vxcen.gcp.mongodb.net:27017,cluster0-shard-00-01-vxcen.gcp.mongodb.net:27017,cluster0-shard-00-02-vxcen.gcp.mongodb.net:27017 from Cluster0-shard-0/cluster0-shard-00-00-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-01-vxcen.gcp.mongodb.net.:27017,cluster0-shard-00-02-vxcen.gcp.mongodb.net.:27017
2020-03-05T09:02:46.010+0000 I NETWORK  [js] Successfully connected to cluster0-shard-00-00-vxcen.gcp.mongodb.net:27017 (1 connections now open to cluster0-shard-00-00-vxcen.gcp.mongodb.net:27017 with a 5 second timeout)
2020-03-05T09:02:46.028+0000 I NETWORK  [ReplicaSetMonitor-TaskExecutor] Successfully connected to cluster0-shard-00-01-vxcen.gcp.mongodb.net:27017 (1 connections now open to cluster0-shard-00-01-vxcen.gcp.mongodb.net:27017 with a 5 second timeout)
2020-03-05T09:02:46.439+0000 I NETWORK  [js] Successfully connected to cluster0-shard-00-02-vxcen.gcp.mongodb.net:27017 (1 connections now open to cluster0-shard-00-02-vxcen.gcp.mongodb.net:27017 with a 5 second timeout)
Implicit session: session { "id" : UUID("1c7432d5-e09c-45f8-8d84-d47e4f572cbf") }
MongoDB server version: 4.2.3
WARNING: shell and server versions do not match
Error while trying to show server startup warnings: user is not allowed to do action [getLog] on [admin.]
MongoDB Enterprise Cluster0-shard-0:PRIMARY> 

mongodump를 사용하여 데이터베이스를 가져오기 위해 mongodb Atlas에 연결하려고 합니다.

mongodump --uri="mongodb+srv://dxxxxxxx:xxxxxx[][]@cluster0-vxcen.gcp.mongodb.net/xxxxxxxxxx"

문제에 직면해 있습니다.

error parsing command line options: error parsing uri (mongodb+srv://dxxxxxxx:xxxxxx[]@cluster0-vxcen.gcp.mongodb.net/xxxxxxxxxx): lookup cluster0-vxcen.gcp.mongodb.net on 127.0.0.53:53: cannot unmarshal DNS message

이는 호환되지 않는 DNS 서버의 경우일 뿐입니다.

위치하다/etc/resolv.conf파일을 작성하고 네임 서버를 다음으로 바꿉니다.8.8.8.8모든 게 잘 될 겁니다그래도 안 되면 시도해 보세요.1.1.1.1.

이 문제는 여기에 보고된 문제와 유사합니다.위와 같이 resolv.conf를 변경하는 수정 사항은 재부팅이 지속되지 않는 것 같습니다.위 링크에서 제안된 해결 방법은 non srvurl을 사용하거나, 아니면 재부팅 후에도 문제가 없는 간단한 방법으로 심볼릭 링크를 제거하는 것입니다./etc/resolve.conf필요한 DNS 서버가 포함된 정적 파일로 대체합니다.

여기에 있는 다른 옵션은 resolvconf 설치를 제안합니다(Ubuntu의 경우).apt install resolvconf), 행 추가nameserver 8.8.8.8로./etc/resolvconf/resolv.conf.d/base그 다음에 달려라sudo resolvconf -u그리고 확실히service resolvconf restart실행을 확인하는 방법systemd-resolve --status.

DNS 서버는 다음과 같이 첫 번째 줄에 표시됩니다.

         DNS Servers: 8.8.8.8
          DNS Domain: sa-east-1.compute.internal
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa

효과적인 두 가지 솔루션:

  1. 값을 사용하여 네임 서버 추가8.8.8.8또는1.1.1.1에 있는 기존의 것들에 추가로./etc/resolve.conf파일
  2. 형식의 연결 문자열 사용mongodb://{db}:{pass}@hostname1.mongodb.net,hostname2.mongodb.net,hostname3.mongodb.net/admin?authSource=admin&replicaSet={replicaSet}&readPreference=primary&ssl=true대신에mongodb+srv://서식을

포맷된 연결 문자열을 가져오려면 다음을 사용합니다.db.getMongo()클러스터의 명령

예를 들어 확인 프로그램을 변경할 수 없는 환경에서는 이전 스타일의 URL을 사용할 수 있습니다.

client = pymongo.MongoClient("mongodb://<username>:<password>@<cluster>...

cloud.mongodb.com Atlas에서 생성한 URL 변경 후 Cluster -> Connect -> 연결 방법 선택 -> Python - 3.4 이상

드디어 작동하기 시작했습니다.

내 설정:

  • 우분투 18.04
  • Python 2.7.17 / 2.7.12
  • 피몽고 3.11.1
  • Google Cloud SDK 319.0.0

저의 경우, DNS 서버에서 MongoDB 연결만 잘못되었습니다.그러나 위에서 제안한 대로 Google DNS 8.8.8.8에서 작동했습니다.UDP 최대 패킷 크기를 줄이는 것이 해결책이었습니다(Google DNS와 동일).

cat /etc/bind/named.conf.options
options {
    #...
    listen-on { 127.0.0.1; };
    allow-recursion { 127.0.0.1; ::1; };
    edns-udp-size 512;
    max-udp-size 512;
};

언급URL : https://stackoverflow.com/questions/60541611/mongodb-dump-fails-with-cannot-unmarshal-dns-message

반응형