mac安装mongoDB数据库方案及其常见问题解决办法

2,260 阅读5分钟

在mac上安装mongodb,也踩了不少坑,说多了都是泪,现将踩坑记录下来。

方法一: brew安装

  1. 打开终端应用程序,输入以下命令,以更新 Homebrew 的软件包列表:

    brew update
    
  2. 输入以下命令,以安装 MongoDB 的最新稳定版本:

    brew install mongodb-community@5.0
    

image.png

安装完毕后,按照指示先运行一下指令,用来注册路径

echo 'export PATH="/opt/homebrew/opt/mongodb-community@5.0/bin:$PATH"' >> ~/.zshrc
  1. 输入以下命令,以启动 MongoDB 的后台服务:
brew services start mongodb-community@5.0

方案二: 下载安装包

image.png

  1. 将解压后的文件放入 /usr/local(打开Finder后按 shift + command +G 输入 /usr/local 后回车就能看到这个隐藏的目录)。

image.png

  1. 配置环境变量,打开终端,输入“open -e .bash_profile”,在打开的文件中加入

image.png

  1. 关闭.bash_profile编辑窗口,回到命令行,输入source.bash_profile使配置生效。

  2. 输入mongod -version,回车后若看到版本号则说明MongoDB已经成功安装

image.png

  1. 在根目录创建一个/data/db文件夹用来作为默认数据库目录。
sudo mkdir -p /data/db
  1. 打开命令行输入/usr/local/mongodb/bin/
./mongod
  1. 打开浏览器,输入localhost:27017 ,会出现这样一行文字。 image.png

  2. 重新打开命令行,输入mongo(若报命令未找到问题,下边有解决办法)

安装过程中的问题及其解决方案

image.png

zsh: command not found: mongo

brew下载方式在运行echo 'export PATH="/opt/homebrew/opt/mongodb-community@5.0/bin:$PATH"' >> ~/.zshrc后会自动注册,但是如果是安装包下载方式,就需要手动增加变量。

解决办法:

1. 查看 mongodb formulae

brew list

image.png

2. 查看并复制mongodb安装目录

brew list mongodb-community@5.0 
----------------------------------------------------------------------
/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/bin/install_compass

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/bin/mongo

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/bin/mongod

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/bin/mongos

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/homebrew.mxcl.mongodb-community@5.0.plist

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/macos_mongodb.plist

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/MPL-2

/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/THIRD-PARTY-NOTICES
---------------------------------------------------------------------------

3. 更新 .zshrc 文件

vi ~/.zshrc

export PATH="/opt/homebrew/Cellar/mongodb-community@5.0/5.0.21/bin:${PATH}"

4.让文件生效

source ~/.zshrc

如果mongo指令还是现实找不到,去安装目录确认一下是否包含mongo指令,有的版本的bin目录下,本来就没有mongo这个文件。解决办法:1.下载之前版本的mongodb,将其bin目录下的mongo文件复制过来。再重启。2.下旧版本的mongodb。

complete:13: command not found: compdef

产生原因:

Compdef 基本上是 zsh 用于加载自动完成的函数。需要激活完成系统。 如果您使用的是 oh-my-zsh 之类的东西,那么这已经解决了,否则您需要将以下内容添加到您的 ~/.zshrc

解决办法:

# 输入以下命令
vi ~/.zshrc
# 编辑器此时打开了`.zshrc`文件 
# 将以下代码加入到文件内容顶部 

autoload -Uz 
compinit compinit

data/db: Read-only file system解决办

mkdir ~/data 
//进入到~/data目录
cd ~/data
//查看目录路径
pwd
//路径需要换成你自己电脑上面的路径
sudo mongod --dbpath=/Users/xxx/data

brew services start xxx 启动异常问题

详细的报错信息 Bootstrap failed: 5: Input/output error

Try re-running the command as root for richer errors.

Error: Failure while executing; '/bin/launchctl bootstrap gui/501 /Users/wangshiwei/Library/LaunchAgents/homebrew.mxcl.mongodb-community@5.0.plist' exited with 5.

解决办法:

出现此问题,大概率是权限问题,在运行指令前加上 sudo即可

brew services start mongodb-community@5.0

mongodb 启动后连接失败

详细报错信息

image.png

此问题一般是运行过程中文文件夹没有权限导致的,具体产生原因可以在运行 mongod指令在运行日志中查询到。

image.png

比如此处,问题是由于tem/mongodb-27017.scok文件夹没有权限导致的,直接删除重新运行。

sudo rm /tmp/mongodb-27017.sock

如果运行还是失败,则再次运行mongod指令查询日志

image.png

此处报错,是因为没有找到数据库数据存储地方 具体的解决办法:

brew安装下,mongodb相关配置文件所处位置。

image.png

打开opt/homebrew/etc/mongod.conf文件(根据电脑型号不同,位置可能不一样)并打开。

systemLog:
  destination: file
  path: /opt/homebrew/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /opt/homebrew/var/mongodb
net:
  bindIp: 127.0.0.1, ::1
  ipv6: true

运行 sudo mongod --dbpath /opt/homebrew/var/mongodb进行目录指定。

运行前,先将失败的服务关闭掉


1. brew services list // 查看运行状态
2. brew services start mongodb-community@5.0
3. brew services stop mongodb-community@5.0

再次运行

brew services start mongodb-community@5.0
brew services list // 查看运行状态

image.png

启动完成!

附录

常用的mongodb指令

1. 连接及查看所有数据库
mongo  主机ip:端口号/连接的数据库名  -u  用户名  -p  密码   //连接远程主机
mongo mongodb://root:12345@10.100.10.10:27017,10.100.10.11:27017/test   //连接集群,会提示输入用户名密码
 
show databases 或 show dbs 查看数据库集合
db.dropDatabase() | 删除数据库 
show users | 查看用户列表

 
db / db.getName()   //查看当前数据库名称
db.stats()   //显示当前DB的状态
db.version()   //查看当前DB的版本
db.getMongo()   //查看当前DB的连接的主机地址

2. 创建或切换数据库
use xxx // 如果数据库xxx存在,则切换到xxx数据库下,如果不存在则创建xxx数据库

3.数据集合
db  //指当前数据库
db.auth('admin', 'admin') 授权验证
db.system.users.find() | 查看用户列表
db.createCollection("people")   //创建名为people的集合
show collections  //查看当前数据库下所有的集合
db.createUser({user: '1', pwd: '1', roles: [{role: 'read', db: 'g'}]}) | 创建用户 
db.system.users.remove({user: 'username'}) | 删除用户
db.changeUserPassword('user', 'pwd') | 修改用户密码
db.runCommand({updateUser: 'x', pwd: '1'}) | 修改用户信息
db.runCommand({usersInfo: 'liurongqing'}) | 查看指定用户信息 
------------------------------------------------------------------


 
 
4. 创建用户
show users   //查看所有用户
//创建管理员用户
use admin # 进入 admin 库
db.createUser({
    user: 'admin',
    pwd: 'admin',
    roles: [{
        role: 'root',
        db: 'admin'
    }]
})
db.auth('admin', 'admin') # 验证

//创建普通用户
db.createUser({
    user: 'wsw',
    pwd: '123456',
    roles: ['readWrite', 'dbAdmin', 'userAdmin']
})

 
 
db.dropUser('wsw')   //删除用户

5. 数据库角色

数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system

6. 权限
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限



mongodb 操作命令

  1. 用户操作

    命令功能
    db.auth('admin', 'admin')授权验证
    db.system.users.find()查看用户列表
    show users查看用户列表
    db.createUser({user: '1', pwd: '1', roles: [{role: 'read', db: 'g'}]})创建用户
    db.runCommand({usersInfo: 'liurongqing'})查看指定用户信息
    db.runCommand({updateUser: 'x', pwd: '1'})修改用户信息
    db.changeUserPassword('user', 'pwd')修改用户密码
    db.system.users.remove({user: 'username'})删除用户
  2. db 库操作

    命令功能
    show dbs查看所有库
    db.dropDatabase()删除数据库
  3. collection 集合操作(表)

    命令功能
    show collections show tables显示集合
    db.createCollection('user')创建集合
    db.COLLECTION_NAME.drop()删除集合

结语

如果觉得对你有帮助,记得点赞好评~好~~~评~~~评。

wsw-ji-end.jpeg