MongoDB 未启动,因为文件权限问题

发布: (2026年2月28日 GMT+8 04:52)
3 分钟阅读
原文: Dev.to

Source: Dev.to

MongoDB 未能启动的原因是文件权限问题的封面图片

原文发布于 Web Warrior Toolbox

一个 Wired Tiger Turtle 的故事…

在排查项目时,我想在本地运行数据库以便部署热修复。我在电脑上搭建了一个带有有用测试数据的数据库,随后又需要再次使用本地实例进行测试。

我尝试使用常规命令启动 MongoDB:

systemctl start mongod

检查服务状态时发现它并未启动:

systemctl status mongod

状态输出中包含错误,但原因并不明显。查阅了几个聊天机器人的建议后,我意识到答案在日志里。

在 Linux 上,应用日志存放在 /var/log 目录下。MongoDB 对应的日志文件是:

/var/log/mongodb/mongod.log

我查看了日志的最后部分:

sudo tail -n300 /var/log/mongodb/mongod.log

在众多行中,最频繁且最重要的消息是:

[ERROR]: __posix_open_file, 924: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied

错误指向文件 /var/lib/mongodb/WiredTiger.turtle。聊天机器人提示该文件应归 mongodb 用户所有。实际上它归 root 所有,于是我更改了包含目录的所有权:

sudo chown -R mongodb:mongodb /var/lib/mongodb

重新启动服务后,MongoDB 正常启动:

systemctl restart mongod
systemctl status mongod

从这个故事中学到的东西

  • 检查日志:日志往往包含你需要的精确错误信息。
  • 利用日志向聊天机器人或团队成员提供信息:提供相关日志片段可以更快地解决问题。
  • 文件权限很重要:确保 MongoDB 的文件和目录归 mongodb 用户所有。

旁白

为什么 WiredTiger.turtle 文件会归 root 所有?第一次热修复是这样运行的:

sudo mongod --config /etc/mongod.conf

直接使用 sudo 启动 mongod 会导致进程以 root 身份创建文件。随后通过 systemctl 启动 MongoDB 时,由于所有权不匹配而失败。将所有权改回 mongodb 后问题得到解决。

让我们继续编码,dev‑san 🤓 加油!

0 浏览
Back to Blog

相关文章

阅读更多 »