当前位置: 首页>>技术问答>>正文


mongodb 3.4.3权限被拒绝有关netbuger_kv_engine.cpp 267错误与ubuntu 16

,

问题描述

我在推出mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的我在日志中得到一个错误

Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

我在ubuntu 16上运行mongodb

我完全按照mongodb文档中的说明安装该版本,这是一个错误吗?任何建议如何解决这一点是值得赞赏的。

附加信息:

mongodb服务启动脚本看起来像这样,并以用户mongodb运行它,这可能连接到错误? LIB /systemd /系统/mongodb.service:

[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=mongodb
Group=mongodb
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

最佳解决方法

I’m having problems lauching mongod as a service: How is it possible that it works when I do sudo mongod -f /etc/mongod.conf but when launching it with sudo service mongod start I get an error in the log

sudo命令以root权限(又名superuser access)启动mongod。如果将mongod作为服务运行,则在服务定义中配置用户和组(在您的示例中为两者配置mongodb)。

无需像root用户那样运行mongod进程,因此根据Principle of least privilege的常见安全实践强烈建议不要这样做。

如果要从命令行测试配置,可以使用sudo与指定用户而不是默认(root)用户一起运行。

例如:

sudo -u mongodb mongod -f /etc/mongod.conf 

通常,最好使用服务配置,而不是手动运行mongod。通过手动调用,您还必须记住包含配置文件路径之类的参数(因为没有默认的配置路径)。如果没有配置文件,mongod也会使用默认选项,例如/data/dbdbPath

Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

您的权限错误的可能原因是之前已将mongod作为root用户启动。某些目录和文件现在可能由root用户拥有,因此mongodb用户无法访问这些目录和文件。您的具体错误与访问数据目录中的文件(即mongod.conf中配置的storage.dbPath)有关。

假设您没有更改mongod.conf文件中的默认路径,您应该能够递归调整权限以匹配mongod.service定义所期望的内容。

首先,确保已停止mongod实例(如果它当前正在运行)。

然后,递归调整对预期用户和组的权限:

# storage.dbPath
sudo chown -R mongodb:mongodb /var/lib/mongodb

# systemLog.path
sudo chown -R mongodb:mongodb /var/log/mongodb

现在您应该能够将mongod作为服务启动。如果服务无法启动,则应在mongod日志文件中进一步详细说明(假设日志文件可由mongodb服务用户写入)。

次佳解决方法

有同样的问题。

/var/log/mongodb/mongod.log中的内容:

2017-05-13T13:46:41.152+0700 E STORAGE  [initandlisten] WiredTiger error (13) [1494658001:152518][15821:0x7fb843803cc0], connection: /var/lib/mongodb/journal/WiredTigerPreplog.0000000002: file-remove: unlink: Permission denied
2017-05-13T13:46:41.159+0700 I -        [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

所以我们看到有些东西无法删除/var /lib /mongodb /journal /中的文件”WiredTigerPreplog.0000000002″所以id只给了权限,我刚刚做了:

sudo chmod 764 /var/lib/mongodb/journal/

如果没有帮助,请尝试:

sudo chown -R mongodb:mongodb /var/lib/mongodb/ && sudo chmod 764 /var/lib/mongodb/journal/

第三种解决方法

有三个set-ups会触发这种问题:

  1. MongoDB安装配置为在给定路径上创建数据库文件,并且当前系统上不存在此路径。此路径在mongo中称为dbpath

在您的情况下,检查/data/db是否存在。如果它没有或者它是空的,mongod正在尝试错误的dbpath。你需要找到它,它通常在/var/lib/mongodb下。

一旦找到它,你可以做两件事。首先,将所有文件从那里复制到/data/db。其次,在mongod.conf文件下更改dbpath,该文件位于(在Linux中)/etc/mongod.conf。确保使用指定配置文件的--config启动mongod。

  1. MongoDB没有读取与其dbpath对应的一个或多个文件或目录的权限。

chown mongodb:mongodb dbpath -R

  1. MongoDB缺少WiredTiger.wt。如果删除dbpath下的文件或设备出现故障,则会发生这种情况。例如,我们这样做是为了测试恢复策略。

如果您确定dbpath是正确的并且那里没有WiredTiger.wt的实例。你的数据库坏了。如果丢失此文件,则无法确保完整性。通过以下方式重新安装mongodb:

sudo apt-get purge mongodb-org*

sudo rm -r dbpath

sudo apt-get install mongodb-org

编辑:或从您的一个副本中复制dbpath。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6479.html,未经允许,请勿转载。