You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下创建多个MongoDB实例失败,权限设置后仍报错求助

解决Ubuntu下MongoDB多实例启动的目录权限问题

问题场景

执行命令启动第二个MongoDB实例:

mongod --port 27018 --dbpath /var/lib/mongodb2

触发报错,核心信息:

{"t":{"$date":"2023-03-28T18:34:10.430+05:30"},"s":"E", "c":"CONTROL", "id":20557, "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"IllegalOperation: Attempted to create a lock file on a read-only directory: /var/lib/mongodb2"}}

已设置目标目录权限,执行ls -al /var/lib/mongodb2输出:

total 8
drwxrwxr-x  2 mongodb mongodb 4096 Mar 28 15:32 .
drwxr-xr-x 74 root    root    4096 Mar 28 15:32 ..

解决方案

1. 验证mongodb用户的实际写入权限

先确认mongodb用户是否能在目标目录创建文件,避免表面权限正常但实际被限制:

su - mongodb -c "touch /var/lib/mongodb2/test_lock"

如果命令报错,检查目录的ACL额外限制:

getfacl /var/lib/mongodb2

若输出中mongodb用户无写入权限,执行:

setfacl -m u:mongodb:rwx /var/lib/mongodb2

2. 处理AppArmor的访问拦截(最可能原因)

Ubuntu默认启用AppArmor,MongoDB的默认安全规则仅允许访问/var/lib/mongodb,新目录会被拦截。

临时测试方案(重启后失效)

关闭MongoDB的AppArmor规则:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.mongod

重新执行启动命令验证是否恢复正常。

永久生效方案(生产环境推荐)

修改MongoDB的AppArmor配置文件:

sudo nano /etc/apparmor.d/usr.bin.mongod

找到默认的目录权限规则块:

/var/lib/mongodb/ r,
/var/lib/mongodb/** rwk,

添加新目录的权限规则:

/var/lib/mongodb2/ r,
/var/lib/mongodb2/** rwk,

保存后重新加载AppArmor规则:

sudo apparmor_parser -r /etc/apparmor.d/usr.bin.mongod

3. 用正确用户身份启动实例

避免直接用root执行mongod,切换到mongodb用户启动:

su - mongodb -c "mongod --port 27018 --dbpath /var/lib/mongodb2"

或通过sudo指定用户:

sudo -u mongodb mongod --port 27018 --dbpath /var/lib/mongodb2

内容的提问来源于stack exchange,提问作者Sins97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:12:35