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

删除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权限错误,形成循环。

原因分析

  1. Socket权限问题:Socket文件由root用户创建,普通用户启动mongod时无权限修改或删除该文件,导致启动失败。
  2. 端口占用:删除Socket后,后台仍有未彻底终止的mongod进程,占用27017端口,新进程无法绑定端口。
  3. 循环触发:关闭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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:44