Mongodb 启动常见错误

Ubuntu 系统下的 Mongodb 安装好后,官方推荐我们用 service mongod start 的方式来启动数据库。

一旦通过此种方式启动数据库,有三点需要注意:

  • 输入 ps -aux|grep mongod

    mongodb  /usr/bin/mongod --config /etc/mongod.conf
    用户名 二进制文件路径 命令参数
  • --config /etc/mongod.conf

上面代码说明数据库实际是通过配置文件的方式来启动的。

  • mongodb

mongod 如果成为一种服务,那么启动 mongod 这个进程的用户是 mongodb,而不是 root 或其他普通用户。

所以当你想用命令行+参数的方式或者mongod -f /etc/mongod.conf来启动 mongod,总会报错。

常见有两种错误:

  • Failed to unlink socket file /tmp/mongodb-27017.sock

.sock 文件是连接 Mongodb 的会话文件,你可以理解为缓存。
为了避免每次重新连接 Mongodb,数据库会把之前的连接存储起来以供下次直接访问。

但缓存偶尔会失效,所以删除/tmp/mongodb-27017.sock文件,直接连接数据库即可。

  • Unable to create/open lock file: /data/db/mongod.lock
  • Unable to create/open lock file: /var/lib/mongodb/mongod.lock

mongod.lock 文件是数据库设计的一个锁文件,用来防止多个数据库实例占用一个连接。

每个数据库实例,都必须创建一个锁或打开现有的锁,才能成功启动。

锁的文件根据你的数据目录不同而不同,可能是/data/db/mongod.lock,也可能是/var/lib/mongodb/mongod.lock

Unable 的意思是不能,也就是权限不够,如果你本身是 root 用户,肯定不会出现这种错误。

root 用户是最高管理员,拥有所有权限,无所不能,但同时也非常危险,所以一个系统只有一个 root 用户。

出现这个问题的原因就是因为你是普通用户,那我们通过 sudo 来获得此锁文件的读权限即可。

sudo chown -R <your-username> /data/db
sudo chown -R <your-username> /var/lib/mongodb