Mac安装配置Mongodb

来源:互联网 发布:如何申请淘宝店铺 编辑:程序博客网 时间:2024/05/18 15:04

最近在在学习nodejs,相比mysql,mongodb与nodejs搭配更合适,存储数据格式也比较接近JS对象。关于mysql和mongodb两种类型数据库的差别与对比,下篇文章再写。
下面来看一下如何在mac上安装mongodb。


Homebrew

你可以选择选择下载mongodb源码编译安装,当然在mac上更方便快捷的方式是用homebrew安装。homebrew是mac上的一个包管理器,相当于ubantu的apt—get。第一次接触homebrew的同学可以戳官网。


安装过程

首先在终端输入如下命令更新Homebrew的package数据库

brew update

更新完毕后,接着输入如下命令进行安装mongodb

brew install mongodb

安装完成终端大概会出现如下命令

==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/mongodb-3.4######################################################################## 100.0%==> Pouring mongodb-3.4.6.mavericks.bottle.2.tar.gz==> CaveatsTo have launchd start mongodb at login:ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgentsThen to load mongodb now:launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plistOr, if you don’t want/need launchctl, you can just run:mongod —config /usr/local/etc/mongod.conf==> Summary/usr/local/Cellar/mongodb/3.4.6: 17 files, 331M

好了现在安装完成。


启动mongbd

输入命令

mongod --config /usr/local/etc/mongod.conf

然后在终端输入命令

mongo

出现如下命令则表示启动成功

MongoDB shell version v3.4.6connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.6Server has startup warnings: 2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] 2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] 2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] 2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000> 

终端输入exit可以退出数据库终端操作。


关闭mongodb

1. 使用数据库命令关闭

数据库操作的终端 依次输入如下命令:

    > use admin    > db.shutdownServer()

注意这里命令区分大小写。

2. 使用kill命令关闭

新建终端窗口 输入如下命令

ps -ef | grep mongo

这个命令查看关于mongo的所有进程的所有信息。如下是我输入命令显示的信息。其中第二列数据是pid。最后一列显示了当时启动该进程输入的命令。

 501  3734  3693   0  5:28下午 ttys000    0:00.00 grep mongo 501  3707  3601   0  5:06下午 ttys001    0:06.13 mongod --auth --port 27017 --dbpath /data/db

再使用kill+pid命令关闭mongo运行的进程。

kill 3707 

这种方式一般用于强制关闭。不建议使用。


问题

1. 启动时WARNING问题

我们在一开始使用mongod --config /usr/local/etc/mongod.conf 启动mongodb时,出现了一大堆提示信息,包括了一些warning,如下:

2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.2017-08-02T16:21:45.890+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

这些warning并不影响使用数据库,但总出现warning看着也很不爽,那这些命令到底是什么呢?怎么解决呢?

其实,这是新版mongodb要求我们建立一个安全的数据库。对数据库操作权限设置,只能允许授权用户操作制定数据库。在stackoverflow上找到了解决方案。

  1. 如果刚刚启动了mongodb请关闭。方法参考上面。
  2. 输入如下命令启动mongodb。这里 /data/db是mongodb存放数据的目录。homebrew安装一般会自动创建。

    mongod --port 27017 --dbpath /data/db
  3. 新建一个终端窗口连接mongodb

    mongo --port 27017
  4. 输入如下数据库命令创建用户。

    use admindb.createUser(  {    user: "yourname",    pwd: "yourpwd",    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  })
  5. 关闭数据库并用如下命令重启。

    mongod --auth --port 27017 --dbpath /data/db
  6. 连接数据库。

    mongo --port 27017 -u "yourname" -p "yourpwd" --authenticationDatabase "admin"
  7. 好了现在就会发现WARNING不见了。

    MongoDB shell version v3.4.6connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.6
  8. 在使用时,如果要指定某个用户对某个数据库的操作,可以创建用户指定权限。 比如 Tester用户对test数据对操作为可读可写。

    use testdb.createUser(  {    user: "Tester",    pwd: "123",    roles: [ { role: "readWrite", db: "test" },             { role: "read", db: "reporting" } ]  })

    连接数据库的命令就变成了

    mongo --port 27017 -u "Tester" -p "123" --authenticationDatabase "test"

    当然如果nodejs使用mongoose操作mongodb时,连接的命令也需要填充一些参数

    mongoose.createConnection('localhost', 'test', 27017, {user: 'Tester', pass: '123'});

2. 启动或关闭数据库时Exception问题

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating[initandlisten] shutdown: going to close listening sockets...[initandlisten] shutdown: going to flush diaglog...[initandlisten] now exiting[initandlisten] shutting down with code:100

这个问题是因为 只有root对 /data/db可写,但是你在用自己的账户操作,所以可以用一下命令授权解决问题。

sudo chmod -R go+w /data/db

或者

sudo chown -R $USER /data/db

好了文章就写到这里。再遇见什么坑和问题会后续补充。

原创粉丝点击