MongoDB에 대한 연결이 거부되었습니다. errno 111


78

외부 소스에서 연결할 수없는 Ubuntu 12.04 LTS 및 MongoDB 인스턴스 (서비스가 실행 중이며 로컬로 연결할 수 있음)를 실행하는 Linode 서버가 있습니다.

이 두 가지 규칙을 내 IP 테이블에 추가했습니다. 여기서 <ip address>는 연결하려는 서버입니다 (이 MongoDB 참조에 설명되어 있음 ).

iptables -A INPUT -s < ip-address > -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d < ip-address > -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

그리고 내 IP 테이블에서 27017에서 <ip address>와의 연결을 허용하는 규칙을 볼 수 있지만 다음과 같은 명령을 사용하여 <ip address>에서 mongo 데이터베이스로 연결하려고 할 때 :

mongo databasedomain/databasename -u username -p password

이 오류가 발생합니다.

2014-07-22T23:54:03.093+0000 warning: Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused 2014-07-22T23:54:03.094+0000 Error: couldn't connect to server < ip address >:27017 (databaseserverip), connection attempt failed at src/mongo/shell/mongo.js:148 exception: connect failed

어떤 도움이라도 대단히 감사합니다 !!!! 감사!!!


다른 mongod가 실행중인 것이 확실합니까? 로컬로 연결할 수 있습니까?
Sammaye

mongod는 로컬에서 실행 중이며 예, 로컬로 연결할 수 있습니다.
dbcooper

답변:


126

모두를 도와 주셔서 감사합니다!

그것이 iptable 충돌이라는 것이 밝혀졌습니다. 열린 포트를 나열하는 두 가지 규칙 (포트가 닫힌 결과).

그러나 일명 의견 중 하나와 manu2013의 의견 중 하나는 갈등이 아니었다면 내가 직면했을 문제였습니다.

그래서! 항상 /etc/mongod.conf파일 을 편집하고 bind_ip = 0.0.0.0외부 연결을 위해 설정 하는 것을 잊지 마십시오 .

또한 mongo가 원하는 포트에 대해 iptable에 충돌하는 규칙이 없는지 확인하십시오 ( iptables를 올바르게 설정하려면 mongodb 사이트의 링크 참조 ).


1
아니면 그냥 localhost 대신의 ConnectionString을에 127.0.0.1을 사용하고 ... 내부 연결
스테판 스타 이거

7
확인하는 것을 잊지 마세요sudo service mongod restart
mqklin

9
bind_ip = 0.0.0.0프로덕션에서 하지 마십시오 !!!! 또는 서버를 공개적으로 노출합니다…
vinyll

당신이 다음 UFW (방화벽)을 사용하여 특정 IP와 제한해야 @vinyll
라즈

48

다음을 시도하십시오.

sudo rm /var/lib/mongodb/mongod.lock
sudo service mongodb restart

3
불운. 여전히 연결 실패가 발생합니다. 시도해 주셔서 감사합니다.
dbcooper

3
MongoD 서버가 모든 인터페이스에서 수신하도록 바인딩되어 있습니까? 2.6.x는 기본적으로 localhost에서만 수신하도록 설정되어 있습니다. "netstat -an | grep 27017"로이를 확인할 수 있으며 mongod가 바인딩 된 모든 IP 주소가 표시되어야합니다.
aks jul.

2
구성 파일 mongodb.conf에서 bindIp 설정 (이전 버전의 경우 bind_ip)이 0.0.0.0 값을 할당하여 모든 인터페이스를 수신하도록 설정되어 있는지 확인하십시오. 기본적으로 기본값은 127.0.0.1이므로 localhost에서만 수신합니다.
manu2013

때로는 mongodb-<port>.sock파일 을 제거해야 합니다. 내 경우에 그것은에있는 / tmp를 폴더
마탄 Tubul

44

이 명령은 나를 위해 문제를 해결했습니다.

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair
sudo service mongod start
sudo service mongod status

프록시 뒤에있는 경우 다음을 사용하십시오.-
export http_proxy = "http : // username : password@company.com : port /"
export https_proxy = "http : // username : password@company.com : port /"

참조 : https://stackoverflow.com/a/24410282/4359237


이 명령을 실행하면 데이터베이스에 저장된 데이터가 제거됩니다
c74ckds

@devend 복구 명령이 모든 데이터베이스에서 repairDatabase 명령을 실행하면 안됩니다. repairDatabase : 데이터 저장소의 오류 및 불일치를 확인하고 복구합니다. repairDatabase는 파일 시스템에 대한 fsck 명령과 유사합니다. 참조
sk1pro99

16

Ubuntu Server 15.04 및 16.04의 경우이 명령 만 실행하면됩니다.

sudo apt-get install --reinstall mongodb

8

나는 /data/db디렉토리 가 없었다 . 나는 하나를 만들고 chmod 777권한을 부여했고 그것은 나를 위해 일했습니다.


3

또 다른 옵션은 데이터베이스를 이렇게 복구하는 것입니다 (참고 : db0 디렉토리가 먼저 미리 생성되어야합니다).

mongod --dbpath /var/lib/mongodb/ --repairpath /var/lib/mongodb/db0

이것은 또한 프로덕션 환경에서 허용되는 옵션입니다 ...


2

나는 또한 같은 문제가 있었다 .dbpath에 디렉토리를 만드십시오. 내 경우에는 / data / db에 디렉토리가 없었습니다. 그래서 하나를 만들었습니다. 이제 작동합니다. 그 디렉토리에 대한 권한을 부여하십시오.


2

나를 위해 / var / lib / mongodb 및 /tmp/mongodb-27017.sock의 소유권을 mongodb로 변경하는 것이 방법이었습니다.

그냥 해:

sudo chown -R mongodb:mongodb /var/lib/mongodb

그리고:

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

그런 다음 mongodb 서버를 시작하거나 다시 시작하십시오.

sudo systemctl start mongod

또는

sudo systemctl restart mongod

상태 확인

sudo systemctl status mongod

1

제 경우에는 이전 버전이 3.2였습니다. 3.6으로 업그레이드했지만 데이터 파일이 새 버전과 호환되지 않아 저와 작업에 사용할 수 없었기 때문에 모든 데이터 파일을 제거했습니다.

다음을 사용하여 로그를 확인할 수 있습니다. /var/log/mongodb


MongoDB는 대상에 도달 할 때까지 각 주요 버전으로 연속적으로 업그레이드해야합니다. 이 경우 먼저 3.4로 업그레이드해야하며 featureCompatibilityVersion도 구성해야합니다. docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone 이렇게하면 데이터 파일을 제거 할 필요가 없습니다. , 이는 대규모 데이터베이스가있는 경우 절대 옵션이 아닙니다.
sezanzeb

1

이 튜토리얼의 설치 지침을 따릅니다.

Ubuntu 16.04에 MongoDB를 설치하는 방법

저도 같은 실수를했습니다. 마지막으로 포트 번호를 설정해야한다는 것을 알았습니다.

mongo 명령의 기본 포트 번호는 27017입니다.

그러나 mongo.conf의 기본 포트 번호는 29999입니다.


1

이것은 나를 위해 트릭을 수행했습니다.

sudo service mongod restart

0

포트가 열려 있어도 MongoDB는 현재 로컬 주소 127.0.0.1에서만 수신 대기합니다. 원격 연결을 허용하려면 서버의 공개적으로 라우팅 가능한 IP 주소를 mongod.conf 파일 에 추가 하십시오.

편집기에서 MongoDB 구성 파일을 엽니 다.

sudo nano /etc/mongodb.conf

bindIP 값에 서버의 IP 주소를 추가하십시오.

...
logappend=true

bind_ip = 127.0.0.1,your_server_ip
#port = 27017

...

이제 사용자 이름과 비밀번호를 가진 모든 사람이 귀하의 DB에 로그인 할 수 있으며 특정 IP에 대해서만 연결을 제한하여이를 방지하고자합니다. 이는 방화벽을 사용하여 수행 할 수 있습니다 (Google에서 UFW 서비스에 대해 읽어보십시오). 그러나 간단히 말해서 이것은 다음과 같아야합니다.

sudo ufw allow from YOUR_IP to any port 27017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.