无法启动mongod:Failed to unlink socket file权限问题求助
问题分析与解决方法
核心原因:AppArmor权限限制
Ubuntu 18默认启用AppArmor安全模块,MongoDB 6.0.3的默认AppArmor配置未授权mongod进程操作/tmp/mongodb-27017.sock文件,导致启动时无法删除旧socket文件(即使手动删除后,新生成的socket后续操作仍受限制)。
解决步骤
1. 临时验证AppArmor是否为问题根源
执行以下命令将mongod的AppArmor策略设为“抱怨模式”(仅记录违规,不阻止操作):
sudo aa-complain /etc/apparmor.d/usr.bin.mongod
然后重新启动mongod服务:
sudo service mongod start
如果服务能正常启动,说明确实是AppArmor限制导致的问题。
2. 永久修复AppArmor配置
编辑MongoDB的AppArmor配置文件:
sudo nano /etc/apparmor.d/usr.bin.mongod
在文件中添加一行授权规则,允许mongod读写/tmp下的socket文件:
/tmp/mongodb-27017.sock rw,
保存并退出后,重新加载AppArmor策略:
sudo systemctl reload apparmor
最后再次启动mongod服务:
sudo service mongod start
3. 其他排查方向(若上述方法无效)
- 检查是否有残留mongod进程:
执行命令查看socket文件是否被占用:
如果输出中有进程信息,用sudo lsof /tmp/mongodb-27017.sockkill -9 <PID>杀死对应进程后再启动服务。 - 确认/tmp目录权限:
执行ls -ld /tmp,确保目录权限为drwxrwxrwt(默认应为该权限,若异常可执行sudo chmod 1777 /tmp修复)。
内容的提问来源于stack exchange,提问作者Saani
相关产品推荐
相关产品推荐

