一、問題描述
CentOS7安裝了mongoDB,並且成功開啓服務,本機上可以訪問數據庫進行CURD,但是通過java或者mongo
數據庫管理工具無法連接該數據庫。
二、解決過程
1、可以確定服務已經開啓,所以要確認端口號是否正確
netstat -anp查看端口信息
[root@localhost db]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 6913/mongod
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3058/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3383/master
tcp 0 0 192.168.3.92:22 192.168.3.123:53765 ESTABLISHED 3920/sshd: root@not
tcp 0 0 192.168.3.92:22 192.168.3.123:52492 ESTABLISHED 4112/sshd: root@not
由此可以知道,mongo服務的端口確實是27017,端口號並沒有錯。
2、可以看到,該服務的Local Address是127.0.0.1:27017。
Local Address表示訪問端口的方式,0.0.0.0 是對外開放端口,127.0.0.1 說明只能對本機訪問,外面訪問不了此端口;這說明了27017端口對外不開放,需要讓防火牆對該端口開放。
//開放27017端口
[root@localhost /]# firewall-cmd --zone=public --add-port=27017/tcp --permanent
success
//查看端口是否開放
[root@localhost /]# firewall-cmd --query-port=27017/tcp
yes
//殺掉進程
[root@localhost /]# kill -9 6913
yes
//後臺重啓服務
[root@localhost /]# nohup mongo &
yes
[root@localhost /]# netstat -anp | grep mongo
tcp 0 127.0.0.1:27017 0.0.0.0:* LISTEN 5754/mongod
開放端口後,local address仍然是127.0.0.1,問題沒有解決。
3、查閱資料,猜測mongo啓動時若沒有指定配置文件,會默認把bind_ip設爲127.0.0.1。爲了驗證假設,在/etc目錄下新建一個mongodb.conf文件。
mongodb.conf
bind_ip_all = true # 任何機器可以連接
#bind_ip = 127.0.0.1,192.168.0.3 # 本機和192.168.0.3可以訪問
port = 27017 # 實例運行在27017端口(默認)
dbpath = /usr/local/mongodb/db # 數據文件夾存放地址(db要預先創建)
logpath = /usr/local/mongodb/logs/27017.log # 日誌文件地址
logappend = true # 啓動時 添加還是重寫日誌文件
fork = true # 是否後臺運行
以配置文件的形式啓動
[root@localhost /]# mongod -f /etc/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 12868
child process started successfully, parent exiting
查詢端口信息,local address成功改爲0.0.0.0
[root@localhost /]# netstat -anp | grep mongo
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 12868/mongod
現在,java可以訪問數據庫了。