0
votes

I want to export some data from MongoDB Atlas.

If I execute the command below, It tries connect localhost and export the data.

mongoexport --uri="mongodb+srv://<username>:<password>@name-of-project-x2lpw.mongodb.net/test" --collection users --out /tmp/testusers.json

Note: If you run this command from Windows CMD, it works fine

After researching the problem and with the help of a user, everything seems to point to a DNS problem and to the related resolv.conf file.

Below the original /etc/resolv.conf:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0
search name.com

At the beginning that resulted into a connection failure as shown below:

wrong

But if I would change that address into the following public available address according to what advised on this post to 1.1.1.1 the connection is successful, see below:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 1.1.1.1
options edns0
search name.com

Which resulted into a connection success as shown below:

correct

HOWEVER the problem is that instead of explicitly connecting to the name of the MongoDB cluster, it will connect to the localhost, which is very strange as I successfully exported the files I was looking for from the real connection. Which means that the machine was correctly connecting to the database but via localhost.

Everything seems to lead, also according to this source and also here to a DNS problem while connecting to MongoDB via terminal to export collections. Now from this last post it not advisable to manually change this address for several reasons, therefore right after successfully exporting the data using DNS 1.1.1.1 I changed it back to its original DNS 127.0.0.53. However I don't think this should be a proper behavior as every time I need to export data I will have to continuously and manually change this address.

What could be the reason for this strange behavior? And therefore what could be a long term solution without manually switching between DNS addresses?

Thanks for pointing to the right direction for solving this issue.

1

1 Answers

0
votes

It seems you all ready have the answer in the links you mentioned. I will summarize this:

Install resolvconf (for Ubuntu apt install resolvconf), add the line nameserver 8.8.8.8 to /etc/resolvconf/resolv.conf.d/base, then run sudo resolvconf -u and to be sure service resolvconf restart. To verify run systemd-resolve --status.

You should see on the first line your DNS server like here:

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

This solution persists between reboots.