Name Status File
mongodb-community error 25600 ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
使用cat /usr/local/var/log/mongodb/mongo.log检查日志总是有帮助的 在我的例子中,看起来最后一行说明了问题"error":"IllegalOperation: Attempted to create a lock file on a read-only directory: /usr/local/var/mongodb"
{"t":{"$date":"2023-06-03T14:30:42.768+08:00"},"s":"I", "c":"CONTROL", "id":21951, "ctx":"initandlisten","msg":"Options set by command line","attr":{"options":{"config":"/usr/local/etc/mongod.conf","net":{"bindIp":"127.0.0.1, ::1","ipv6":true},"storage":{"dbPath":"/usr/local/var/mongodb"},"systemLog":{"destination":"file","logAppend":true,"path":"/usr/local/var/log/mongodb/mongo.log"}}}}
{"t":{"$date":"2023-06-03T14:30:42.769+08:00"},"s":"I", "c":"NETWORK", "id":5693100, "ctx":"initandlisten","msg":"Asio socket.set_option failed with std::system_error","attr":{"note":"acceptor TCP fast open","option":{"level":6,"name":261,"data":"00 04 00 00"},"error":{"what":"set_option: Invalid argument","message":"Invalid argument","category":"asio.system","value":22}}}
{"t":{"$date":"2023-06-03T14:30:42.769+08:00"},"s":"I", "c":"NETWORK", "id":5693100, "ctx":"initandlisten","msg":"Asio socket.set_option failed with std::system_error","attr":{"note":"acceptor TCP fast open","option":{"level":6,"name":261,"data":"00 04 00 00"},"error":{"what":"set_option: Invalid argument","message":"Invalid argument","category":"asio.system","value":22}}}
{"t":{"$date":"2023-06-03T14:30:42.770+08:00"},"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: /usr/local/var/mongodb"}}
7条答案
按热度按时间zlwx9yxi1#
你好,所以在停止mongodb后运行
sudo brew services start mongodb-community
修复了它。yb3bgrhw2#
我也有同样的问题。最后在
/usr/local/var/log/mongodb/mongo.log
中发现了一个错误,它表明我在/usr/local/var/mongodb
中的数据库文件对于这个版本的mongodb(版本4.4)来说太旧了(版本4.2)。因为我不需要这些文件,所以我删除了它们,mongodb启动正常。看看你的日志,他们会告诉你什么是错的。0pizxfdo3#
你好刚刚调试了一个类似的问题。如果你尝试以root权限运行mongodb,它会显示错误,问题可能是文件权限问题。
您可以确认位置(目录可能会有所不同,这是默认值):使用
cat /usr/local/var/log/mongodb/mongo.log
显示mongo日志您很可能在文件上看到“Permission denied”错误。(我的是一堆文件)。
你需要在这些文件上运行
chown
:chown -R <login> /usr/local/var/mongodb
应该能解决
您可以通过运行
ls -la <directory>
并验证所有内容现在都归您的登录用户所有来进行验证。vaj7vani4#
此错误的另一个原因可能是您忘记启用旧版本的向后不兼容功能。如果您一个接一个地更新了多个版本,则可能会发生这种情况。例如,如果你想从3.2迁移到3.6,你必须安装所有的中间版本(在本例中是3.4),并且对于每个中间版本,你必须在安装下一个版本(在本例中是3.6)之前启用“向后不兼容的3.4功能”,使用以下命令:
(as例如,按照https://www.mongodb.com/docs/manual/release-notes/3.4-upgrade-standalone/中的指令)。如果您忘记这样做,版本3.6将无法启动,在日志文件(/usr/local/var/log/mongodb/mongo.log)中显示通知“* 重要信息:升级问题:在尝试升级到3.6之前,需要将数据文件完全升级到3.4版;请参阅http://dochub.mongodb.org/core/3.6-upgrade-fcv了解更多详细信息。”
wdebmtf25#
我花了两个小时来解决这个问题。问题是mongod.conf文件中出现了一个意外的令牌,导致mongodb-community@4.2无法启动。
要跟踪问题,请打开
.plist
文件,查看输出日志文件的位置,您可以在StandardErrorPath
键后找到它。q8l4jmvw6#
请参考https://blog.codewithdan.com/installing-mongodb-on-mac-catalina-using-homebrew/我按照此操作在/System/Volumes/Data下创建了一个data/db文件夹,并更新了/usr/local/etc/mongod.conf中变量'dbPath:'的路径
确保用户和用户权限(创建此文件的用户与运行Mongo brew服务的用户相同)
我的服务还没有开始。运行“brew服务列表”时出现错误
在这个问题上,上面提到了同样的错误。
当我检查/usr/local/var/log/mongodb/mongo. log时
无法取消链接/tmp/mongodb-27017.sock此文件。
请参考下面的链接来解决这个问题。(只需删除该.sock文件)
https://www.dev2qa.com/how-to-fix-failed-to-unlink-socket-file-error-when-start-mongo-db-on-macos/
然后,我确保data/db的权限是好的
d-wx--x--x 3 name wheel 96 Mar 22 11:20 data
然后停止了mongo的brew服务并重新启动。成功了
g52tjvyc7#
与Rob洛佩斯/克雷格Eddy的答案类似,以下是我在macOS ventura 13上使用mongodb-community@6.0与自制软件的工作原理:
我在运行
brew services start mongodb-community
后得到类似的错误使用
cat /usr/local/var/log/mongodb/mongo.log
检查日志总是有帮助的在我的例子中,看起来最后一行说明了问题
"error":"IllegalOperation: Attempted to create a lock file on a read-only directory: /usr/local/var/mongodb"
顺便说一句,我尝试使用
sudo brew services start mongodb-community
,它的工作,但也得到了一个警告,不建议。因此,我尝试使用此命令更改
/usr/local/var/mongodb
的权限,这解决了错误:只是一个addtl信息:
***chown:**命令,用于在类Unix操作系统中更改文件和目录的所有权。chown命令允许您为给定的文件或目录指定新的所有者。
***-R:**是chown命令的一个选项,代表recursive,使用时指示chown进行递归操作,改变指定目录及其子目录中所有文件和目录的所有权。
***id -un:**这是一个包含在反引号内的命令替换。它执行id -un命令并将其输出替换为整个命令的一部分。id -un命令用于检索当前用户的用户名。因此,在此上下文中,它获取执行sudo命令的用户的用户名。