本机当前版本:10.15.3 (19D76)
网络上的 Mac 安装 MongoDB 的教程十有八九都没法用了,倒腾了一下午,将今日份倒腾记录下来, 供参考
一、下载并解压
- 官网链接:找到 Software-Community Server 跳转,Download 即可
P.S. 自带浏览器下载很慢/老断线的话,可以考虑迅雷会员下载 ->体验起飞速度
- 下载完成后解压到
/Users/「username」/softwares
文件夹中, 并建议将mongodb-macos-x86_64-4.2.3
文件夹名称改为mongodb
P.S./Users/「username」/softwares
为自建文件夹,可换为您喜欢的其他自定义文件夹(想安装的位置就行 )
P.P.S.可以自己在文件夹中双击解压,或终端中执行以下命令行完成解压:
sudo tar -zxvf mongodb-macos-x86_64-4.2.3.tgz
二、PATH 配置
- 本机环境为 zsh 下;若为 bash 可能在 bash_profile 文件内配置
配置好 PATH ,我们就不用每次想要启动MongoDB 时,都要:
cd /usr/local/mongodb/bin/
./mongod
- 如何实现:
终端中执行以下命令:
open ~/.zshrc
在文件最末添加配置(别出错 ):
#mongodb 配置
PATH=$PATH:/Users/「username」/softwares/mongodb/bin
P.S. 同上文,/Users/「username」/softwares可换为其他自定义路径
保存退出后,终端中执行以下命令:
source ~/.zshrc
三、创建数据库存储目录
若从头完全按本文操作,则可直接照下方“解决方式”处的命令进行创建即可,不会报错 :)
错误及解决方式
按大多数教程,输入sudo mkdir -p /data/db
后,产生错误:mkdir: /data/db: Read-only file system。(按个人理解是macOS 升级到 Catalina 的缘故)
- 解决方式:
在用户文件夹中创建该目录,如:
mkdir -p /Users/「username」/softwares/mongodb/data/db
// username 需更改
P.S. 数据库目录也要跟着指定为该目录(即启动时需要完整输入如下指令):
mongod --dbpath /Users/「username」/softwares/mongodb/data/db
P.S.一定要使用绝对路径
P.P.S. 如果涉及到 permission 之类的权限类的报错的话,可尝试指令前加 sudo
其实到此就结束了,但长远来看,我们应使用配置文件启动 MongoDB,请见下文。
四、启动MongoDB
(一)设置配置文件
目的&好处:虽然还是很长一串指令, 但是我们可以在配置文件中写入很多配置,这样我们就不需要写n多条指令来完成启动了(本文仅进行路径配置,其他配置会另写文章)
-
原本启动时我们需要输入:
mongod --dbpath /Users/「username」/softwares/mongodb/data/db
设置配置文件后我们改为输入:
mongod --config /Users/「username」/softwares/mongodb/conf/mongodb.conf
-
如何实现:
1)在mongodb/ 文件夹中创建配置文件夹 conf
2)conf 文件夹内创建配置文件,命名为 mongodb.conf
3)打开配置文件mongodb.conf, 写入:
storage: dbPath: "/Users/「username」/softwares/mongodb/data/db"
4)保存退出,可以通过配置文件启动 MongoDB 了。
5)成功标志:能看到如下的类似内容(倒数的几行里找):
2020-02-20T22:56:54.665+0800 I NETWORK [listener] Listening on
/tmp/mongodb-27017.sock
2020-02-20T22:56:54.665+0800 I NETWORK [listener] Listening on 127.0.0.1
2020-02-20T22:56:54.665+0800 I NETWORK [listener] waiting for connections onport 27017
找到NETWORK行,
27017号端口的出现就是成功标志 :)
(二)错误及解决方式
-
请确保各个自建文件、文件夹的所有者均为「username」(owner),而不是 root
如:mongodb 文件夹、data\db 文件夹、conf 文件夹、mongodb.conf 文件等
修改文件/文件夹所有者权限的简单语法说明:
sudo chown 「owner」 文件/文件夹名
即可-
修改文件/文件夹读写权限的简单语法说明:
chmod 664 文件/文件夹名
即够用(664 对应-rw-rw-r-- ,如需了解更多权限设置可参考链接)
写入配置时,如果提示无法写入,请改为加 sudo 打开配置文件:
sudo vim mongodb.conf
,即可修改后顺利保存。另解::w !sudo tee %
。完成后请及时修改文件权限 。-
写完配置文件,通过 conf 文件启动时,发现提示错误:Error parsing YAML config file: yaml-cpp: error at ...: illegal map value
解决方式:把 tab 键换成 4 个空格键即可
-
启动MongoDB时出现:Failed to unlink socket file /tmp/mongodb-27017.sock...
例如:
...
2016-07-12T16:52:28.912+0800 E NETWORK [initandlisten]
Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
...
或:
2020-02-20T15:33:48.907+0800 E NETWORK [initandlisten]
Failed to unlink socket file /tmp/mongodb-27017.sock Permission denied
...
从红色的提示可以看出是因为
/tmp/mongodb-27017.sock这个文件没有操作权限
。去查他的权限,可以看到这个文件的所有者是root用户,因为在准备环境的时候用的是root用户,而当时用root用户启动过一个没成功,后面修改配置文件过后用mongodb用户启动就出现了这个问题。
解决方式:
直接把该文件删除掉,再用Mongodb用户启动就行了。
sudo rm /tmp/mongodb-27017.sock mongod
再次查询就可以看到是mongodb用户创建的文件了
-
启动MongoDB时出现:Failed to set up listener: SocketException: Address already in use
解决方式:lsof -i :27017 //找到该端口号的 PID kill -9 61316 //61316为找到的 PID 号
五、关闭MongoDB
Ctrl+C
希望对看到这篇的你有帮助,不会倒腾大半天
开始一起愉快地继续学习/使用 MongoDB 吧 :)