一、问题描述
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可以访问数据库了。