删除socket文件后MongoDB mongod仍报‘Address already in use’错误求助
解决MongoDB启动时的Socket权限与端口占用循环问题
问题现象
启动mongod时触发权限错误,日志如下:
{"t":{"$date":"2023-05-23T07:38:43.017-04:00"},"s":"E", "c":"NETWORK", "id":23024, "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Permission denied"}} {"t":{"$date":"2023-05-23T07:38:43.017-04:00"},"s":"F", "c":"ASSERT", "id":23091, "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":40486,"file":"src/mongo/transport/transport_layer_asio.cpp","line":1126}} {"t":{"$date":"2023-05-23T07:38:43.017-04:00"},"s":"F", "c":"ASSERT", "id":23092, "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"}
查看Socket文件权限,发现其归属root用户:
ls -lat /tmp/mongodb-27017.sock srwx------ 1 root wheel 0 May 23 07:07 /tmp/mongodb-27017.sock
删除该Socket文件后,又出现端口占用错误:
{"t":{"$date":"2023-05-23T07:50:58.292-04:00"},"s":"E", "c":"CONTROL", "id":20568, "ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"Address already in use"}}}
重启后又回到最初的Socket权限错误,形成循环。
原因分析
- Socket权限问题:Socket文件由root用户创建,普通用户启动
mongod时无权限修改或删除该文件,导致启动失败。 - 端口占用:删除Socket后,后台仍有未彻底终止的
mongod进程,占用27017端口,新进程无法绑定端口。 - 循环触发:关闭
mongod时未清理残留进程,重启后再次生成root权限的Socket文件,重复错误。
解决步骤
1. 彻底终止所有MongoDB进程
查找并杀死所有mongod进程:
# 列出所有mongod进程 ps aux | grep mongod # 杀死指定进程(替换<PID>为实际进程ID) sudo kill -9 <PID> # 或批量杀死所有mongod进程 sudo pkill -9 mongod
2. 清理残留Socket文件
删除权限异常的Socket文件:
sudo rm /tmp/mongodb-27017.sock
3. 以正确用户身份启动MongoDB
避免用root用户启动mongod,使用普通用户启动,或确保服务运行用户拥有Socket目录的读写权限:
# 普通用户直接启动(需指定数据库路径) mongod --dbpath /path/to/your/database # 若使用系统服务启动,确保服务配置的运行用户正确(如mongod用户) sudo systemctl start mongod
4. 配置Socket权限避免后续问题
编辑MongoDB配置文件(通常为/etc/mongod.conf),指定Socket文件的归属和权限:
net: unixDomainSocket: path: /tmp/mongodb-27017.sock permissions: 0700 fileOwner: your_username fileGroup: your_groupname
修改后重启服务:
sudo systemctl restart mongod
验证
启动mongod后检查日志无错误,再查看Socket文件权限:
ls -lat /tmp/mongodb-27017.sock
此时文件应归属启动mongod的用户,权限正常。
内容的提问来源于stack exchange,提问作者johnmayerfan
相关产品推荐
相关产品推荐

