MongoDB 是什么

MongoDB 是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

它的特点:高性能、易部署、易使用,存储数据非常方便。

MongoDB 官网: https://www.mongodb.com

 

Mac 安装MongoDB

Mac OS上面安装MongoDB,可以编译源代码安装 ,也可以使用Homebrew安装;普通青年的HomeBrew方式,文艺青年的源码编译方式。

Homebrew 安装 MongoDB

首先更新Homebrewpackage数据库:

brew update

更新完成之后,就可以直接安装MongoDB了。

brew install mongodb

$ brew install mongodb
Downloading https://homebrew.bintray.com/bottles/mongodb-3.4.4.sierra.bottle.tar.gz
######################################################################## 100.0%
Pouring mongodb-3.4.4.sierra.bottle.tar.gz
Caveats
To have launchd start mongodb now and restart at login:
  brew services start mongodb
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf
Summary
   /usr/local/Cellar/mongodb/3.4.4: 17 files, 266.3MB

 

启动 MongoDB

从上面的安装提示中可以看到启动MongoDB的方法:

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

mongod.conf 内容:

MongoDB 3.0

$ cat /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
  journal:
    enabled: true
net:
  bindIp: 127.0.0.1
  port: 27017
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid

 

MongoDB 2.0

# cat /etc/mongod.conf
# mongod.conf

#where to log
logpath=/var/log/mongodb/mongod.log

logappend=true

# fork and run in background
fork=true

port=27017

dbpath=/var/lib/mongo

# location of pidfile
pidfilepath=/var/run/mongodb/mongod.pid

# Listen to local interface only. Comment out to listen on all interfaces.
#bind_ip=127.0.0.1

# Disables write-ahead journaling
# nojournal=true

# Enables periodic logging of CPU utilization and I/O wait
#cpu=true

# Turn on/off security.  Off is currently the default
#noauth=true
auth=true

# Verbose logging output.
#verbose=true

# Inspect all client data for validity on receipt (useful for
# developing drivers)
#objcheck=true

# Enable db quota management
#quota=true

# Set oplogging level where n is
#   0=off (default)
#   1=W
#   2=R
#   3=both
#   7=W+some reads
#diaglog=0

# Ignore query hints
#nohints=true

# Enable the HTTP interface (Defaults to port 28017).
#httpinterface=true

# Turns off server-side scripting.  This will result in greatly limited
# functionality
#noscripting=true

# Turns off table scans.  Any query that would do a table scan fails.
#notablescan=true

# Disable data file preallocation.
#noprealloc=true

# Specify .ns file size for new databases.
# nssize=<size>

# Replication Options

# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#keyFile=/path/to/keyfile

 

mongodb 配置文档: 

Configuration File Options (mongodb官网)

 

Mac 自动启动 MongoDB

Mac 下用于初始化系统环境的关键经常是 launchd,它是内核转载成功后启动的第一个进程。

所以设置服务的开机启动要用到这个进程。采用 launchd 开机启动 需要配置一个plist文件。

开机启动分为两种:

     1、在用户登陆前启动;( plist文件放置在目录:~/Library/LaunchDaemons )

     2、在用户登陆后启动。( plist文件放置在目录:~/Library/LaunchAgents )

如 MongoDB 的开机启动,需要在 LaunchDaemons 或 LaunchAgents 创建一个 plist文件。

在终端中逐个输入如下命令

cd ~/Library/LaunchAgents

//如果没有,建立目录
mkdir -p ~/Library/LaunchAgents
//建立目录的步骤不是必须的

cp /usr/local/Cellar/mongodb/3.4.4/homebrew.mxcl.mongodb.plist ~/Library/LaunchAgents/
sudo launchctl load -w homebrew.mxcl.mongodb.plist
sudo launchctl start homebrew.mxcl.mongodb

 

默认情况,自启动的数据库配置为

集合 项目 路径 用途
Path ConfPath /usr/local/etc/mongod.conf 数据库配置文件
Path StandPath /usr/local/var/log/mongodb/output.log 运行日志路径
systemLog destination file 类型
systemLog logPath /usr/local/var/log/mongodb/mongo.log 数据日志路径
systemLog logAppend true 是否开启增量日志
storage journal:enabled true 故障恢复持久化
storage dbPath /usr/local/var/mongodb 数据文件路径
storage directoryPerDB true 是否一库一文件
storage engine wiredTiger 数据库引擎
net bindIp 127.0.0.1 绑定IP
net port 27017 默认端口

RoboMongo连接meteor数据库

验证网址 : http://127.0.0.1:27017

mac-os-x-installing-mongodb-11

 

使用 MongoDB

首先需要连接到MongoDB service:

mongo

 

插入数据:

db.test.insert({‘name':’test’})

WriteResult({ “nInserted” : 1 })

 

查看数据:

db.test.find()

{ "_id" : ObjectId("55e407e120d5b7acf4301d3b"), "name" : "test" }

 

MongoDB 后台关闭命令

$ .bin/mongod                       // 登录客户端

> use admin                          // 切换到管理员

> db.shutdownServer()         // 关闭mongodb

或者

> db.adminCommand({shutdown : 1, force : true})
> //or
> db.shutdownServer({force : true})

> db.adminCommand(shutdown : 1, force : true, timeoutsec : 5)     // 超时关闭 
> //or 
> db.shutdownServer({force : true, timeoutsec : 5})

 

 

MongoDb 可视化工具

MongoDb 可视化管理工具有很多,详见:

Admin UIs: http://docs.mongodb.org/ecosystem/tools/administration-interfaces/

经人推荐试用了一下Robomongo,这个是跨平台的,Windows、Mac、Linux下都可以使用。

RoboMongo官网: https://robomongo.org/download

最后更新版本:robomongo-1.0.0-darwin-x86_64-89f24ea.dmg 

mac-os-x-installing-mongodb-02

mac-os-x-installing-mongodb-01

 

Mongodb 错误处理

问题1: 连接mongodb失败. mongod 启动报错

mongod -f

about to fork child process, waiting until server is ready for connections.
forked process: 5211
ERROR: child process failed, exited with error number 1

原因:没有正常关闭mongod服务,导致mongod被锁

解决:删除掉mongod里的mongod.lock 文件,重新启动服务

$ sudo find / -name "mongod.lock"
find: /dev/fd/SQL: No such file or directory
find: /dev/fd/SQL: No such file or directory

/usr/local/var/mongodb/mongod.lock

删除文件 mongod.lock 

sudo rm -f /usr/local/var/mongodb/mongod.lock

修复 mongod

mongod repair

创建文件目录,删除文件

$ mkdir -p /var/run/mongodb
$ rm -f /var/run/mongodb/mongod.pid

 

 

参考推荐

Install MongoDB Community Edition on OS X (官网)

MongoDB 安装配置

MongoDB 生态 – 可视化管理工具

MongoDB 图形化管理工具

MongoDB 用户管理及密码修改

Python连接MySQL、MongoDB、Redis、memcache