谏知中文网

悟已往之不谏,知来者之可追

MongoDB启动的一些问题

发表于 2017-07-29 4327 次浏览

安装完成,写入PATH路径,设定数据库位置

[root@localhost]# mkdir -p /data/db

试着来启动一下,无返回

[root@localhost etc]# cd /usr/local/mongodb/bin/
[root@localhost bin]# ./mongod
2017-07-28T10:31:59.655+0800 I NETWORK [thread1] **
2017-07-28T10:31:59.655+0800 I NETWORK [thread1] waiting for connections on port 27017

启动失败自然也就连接不上了,网上有很多人遇到相同问题,梳理下解决方法

通过命令行启动

//创建Log路径
[root@localhost]# mkdir -p /usr/local/mongodb/data/
[root@localhost]# touch mongodb.log

//创建Conf文件
[root@localhost etc]# vi mongo.conf
//conf内容
auth=true

//检查端口是否被占用
[root@localhost etc]# lsof -i :27017

//cd到bin路径下,命令行启动
[root@localhost etc]# ./mongod --dbpath /data/db 
--logpath /usr/local/mongodb/data/mongodb.log
--config /etc/mongo.conf --fork

//连接
[root@localhost bin]# ./mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
>

通过配置文件启动

//丰富配置文件
dbpath = /data/db
logpath = /usr/local/mongodb/data/mongodb.log
logappend = true
bind_ip = 127.0.0.1
port = 27017
fork = true
auth = true

//启动
[root@localhost bin]# ./mongod -f /etc/mongo.conf

另外,在/data/db/目录下生成了mongod.lock文件,如果上次未正常关闭mongo,下次启动之前先要删除lock文件

写进service服务

这个脚本原理很简单,写得很挺费劲的,以此纪念

#!/bin/bash
PATH=/usr/local/mongodb/data/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mongodb
test -x $DAEMON || exit 0
set -e
start(){
    pid=`ps -o pid,command ax|grep mongod|awk '/-f/{print $1}'`;
    if [ ! -n "${pid}" ]; then
      echo -e "Starting MongoDB... "
      /usr/local/mongodb/bin/mongod -f /etc/mongo.conf
    else
      echo -e "MongoDB is runnning."
    fi
}
stop(){
    pid=`ps -o pid,command ax|grep mongod|awk '/-f/{print $1}'`;
    if [ ! -n "${pid}" ]; then
      echo -e "MongoDB is already stop."
    else
      /usr/local/mongodb/bin/mongod --shutdown
      echo -e "Stopping MongoDB"
    fi
}
case "$1" in
    start)
      start
      ;;
    stop)
      stop
      ;;
    reload)
      stop
      start
      ;;
    *)
      N=/etc/init.d/$NAME
      echo "Usage: $N {start|stop|reload}" >&3
      exit 1
      ;;
esac
exit 0

这里面start/stop操作的核心是执行相关命令,如果再把它们整合到单独文件就不会有了输出了,更简洁