引言
之前在Linux上安装MongoDB遇到了很多的坑,导致拉长了很大的时间周期,现在准备记录一下整个流程的笔记以及一些安装过程中遇到的坑
MongoDB的安装
在Linux中,安装MongoDB远比Windows上安装快很多,Windows版本的安装普遍因为系统问题会出现bug,而如果安装成功,后面的步骤我感觉会比linux轻松很多。那么linux总结的安装过程如下:
# 1. 安装3.0.1的MongoDB包
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz
# 2. 解压安装包
tar -zxvf mongodb-linux-x86_64-3.0.1.tgz
# 3. 将其放入/usr/local/mongodb目录下
mv -r mongodb-linux-x86_64-3.0.1 /usr/local/mongodb
# 4. 创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
# 5. 无权限启动MongoDB
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/localmongodb/logs --logappend --port=27017 --fork
# 有权限启动mongodb
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --auth --port=27017 --fork
这里需要注意MongoDB一定要选对版本,我安装过3次,因为版本的一些兼容或者熟悉程度,选用的是MongoDB3.0.1,然后中间安装过一个mongodb-linux-i686-3.0.2,同样可以用wget获取到,但之后当我们运行mongod的时候会有错误是:
mongod: error while loading shared libraries: libnetsnmpmibs.so.30: cannot open shared object file: No such file or directory
下张图片即为启动成功后显示的进程:
后来发现这个东西好像根本就不是Linux上的MongoDB版本,因为包内存还有很多文件都不全,所以果断rm -rf删除。删除后换了我上面写的mongodb包然后顺着流程能走到启动那里。
之后还有一个很大的问题就是如果不创建data文件夹,无权限启动的时候还是会报错为number 100,这个表示有锁,但新的mongodb刚下载完都还没有启动过怎么会有锁呢?原因就是启动的路径如果缺少文件就会报数字100,如果路径有错的话那么就是数字1。可以看下面这张图:
上述图片与更详细的解释可以看如下链接:
Mongodb中经常出现的错误(汇总)child process failed, exited with error number
MongoDB安装中的坑目前我遇到的就是这么多,所以到这里基本就安装成功了,下面将介绍怎么启动与部署。
MongoDB启动与部署
看我上面发的那张图,那样显示启动成功,因为有这个进程了,然后我来详细讲解一下启动的过程。首先我们先无权限启动,即:
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
启动起来之后我们ps看一下有没有当前进程,如果有的话那么就进入到bin目录下直接./mongo进入数据库:
这里因为我项目进程是项目数据库不是本地的,所以报错为不能默认的本地地址127.0.0.1:27017,所以这里我们需要启动时在后面加上./mongo IP:port,然后才能进入。
进入之后因为没有账户信息,所以需要我们创建一个MongoDB用户,创建命令如下:
# 先进入到管理员下
use admin
# 创建root用户
db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
# 验证用户
db.auth("root","123456")
上述命令为创建一个root权限用户,这里比较重要的是权限的设置,而关于权限,我下面列举了MongoDB基本的角色与权限介绍:
mongodb权限
内置角色 | 名称 |
---|---|
数据库用户角色 | read、readWrite; |
数据库管理角色 | dbAdmin、dbOwner、userAdmin; |
集群管理角色 | clusterAdmin、clusterManager、clusterMonitor、hostManager; |
备份恢复角色 | backup、restore; |
所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase |
超级用户角色 | root, 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) |
内部角色 | __system |
具体角色
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
测试连接MongoDB
这里我用的是mongovue测试工具,直接输入当前我们在Linux中安装并启动的端口,和Navicat一样,在mongovue的可视化界面上新建一个连接,然后填入Linux中配的IP和端口,如果能测试ping通,那基本就没问题可以直连项目了。