MongoDB无法启动解决记录
时间:2017-05-28 15:21 来源:linux.it.net.cn 作者:IT
系统版本:Centos 6.5
问题描述
某次,在重启服务器之后就发现mongodb数据库无法启动。
使用命令:
1
2
service mongod start
service mongod restart
进行启动操作时,不显示OK也不显示Failed字样;进行重启操作时,只显示关闭正常,但是启动状态一样不明,不显示OK也不显示Failed。
解决
由于不知道什么原因,我们可以去查看mongodb的log文件,查看打印内容。
查找log文件位置
我们从mongodb配置文件中找到log文件的目录位置:
1
vi /etc/mongod.conf
找到文件里面的systemlog配置:
1
2
3
4
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
可以看到,log文件的目录是/var/log/mongodb/mongod.log。
打开log文件,查看问题描述
打开文件,跳到文件末尾,可以看到输出内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2017-02-09T16:16:30.747+0800 I CONTROL [main] ***** SERVER RESTARTED *****
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] MongoDB starting : pid=7202 port=27017 dbpath=/var/lib/mongo 64-bit host=serv2.skyfun.com
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] db version v3.2.4
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] modules: enterprise
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] build environment:
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] distmod: rhel62
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] distarch: x86_64
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-02-09T16:16:30.753+0800 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "0.0.0.0", port: 27017 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2017-02-09T16:16:30.768+0800 E NETWORK [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
2017-02-09T16:16:30.768+0800 E NETWORK [initandlisten] addr already in use
2017-02-09T16:16:30.768+0800 E STORAGE [initandlisten] Failed to set up sockets during startup.
2017-02-09T16:16:30.768+0800 I CONTROL [initandlisten] dbexit: rc: 48
2017-02-09T16:24:00.561+0800 I CONTROL [main] ***** SERVER RESTARTED *****
打印出的 SERVER RESTARTED 说明这是我们进行重启操作时输出的log内容。
定位问题
可以看到 listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017 这行内容,提示已经在使用,我们可以去验证这个端口是否已经被占用。
查找被占用的端口:
1
2
netstat -tln
netstat -tln | grep 27017
第一行命令可以查看端口使用情况,第二行命令则只查找 27017 端口的使用情况。
如果端口被占用,接下来我们可以用lsof查看端口属于那个程序,被哪个进程占用。(注:Linux中若没有安装lsof,则可以安装一下,centos安装命令: yum install lsof)
执行lsof -i:27017后,我们发现,这个端口就是被mongodb本身占用,所以我们需要释放这个端口,根据查找出来的信息,杀掉占用端口的进程:
1
kill -9 1639 // 1639是进程的pid
完成后,我们再次重新启动数据库,显示重启OK。
重启OK之后,客户端进行连接时发现,仍然失败。尝试用Robomongo进行连接数据库时也提示连接失败,可以得知应该是防火墙问题,采用命令关掉防火墙即可:
1
service iptables stop
注:这里因为是开发服务器,所以直接关闭防火墙没有大碍,正常情况下选择开启某些端口而不是关闭整个防火墙更为妥当。
(责任编辑:IT)
系统版本:Centos 6.5 问题描述
某次,在重启服务器之后就发现mongodb数据库无法启动。
进行启动操作时,不显示OK也不显示Failed字样;进行重启操作时,只显示关闭正常,但是启动状态一样不明,不显示OK也不显示Failed。 解决由于不知道什么原因,我们可以去查看mongodb的log文件,查看打印内容。 查找log文件位置我们从mongodb配置文件中找到log文件的目录位置:
找到文件里面的systemlog配置:
可以看到,log文件的目录是/var/log/mongodb/mongod.log。 打开log文件,查看问题描述打开文件,跳到文件末尾,可以看到输出内容:
打印出的 SERVER RESTARTED 说明这是我们进行重启操作时输出的log内容。 定位问题可以看到 listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017 这行内容,提示已经在使用,我们可以去验证这个端口是否已经被占用。 查找被占用的端口:
第一行命令可以查看端口使用情况,第二行命令则只查找 27017 端口的使用情况。 如果端口被占用,接下来我们可以用lsof查看端口属于那个程序,被哪个进程占用。(注:Linux中若没有安装lsof,则可以安装一下,centos安装命令: yum install lsof) 执行lsof -i:27017后,我们发现,这个端口就是被mongodb本身占用,所以我们需要释放这个端口,根据查找出来的信息,杀掉占用端口的进程:
完成后,我们再次重新启动数据库,显示重启OK。 重启OK之后,客户端进行连接时发现,仍然失败。尝试用Robomongo进行连接数据库时也提示连接失败,可以得知应该是防火墙问题,采用命令关掉防火墙即可:
注:这里因为是开发服务器,所以直接关闭防火墙没有大碍,正常情况下选择开启某些端口而不是关闭整个防火墙更为妥当。 (责任编辑:IT) |