系统版本: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) |