mongodb的安装方式比较简单,下面演示在CentOS7上用yum方式安装。
参考文献
- 下载地址 https://www.mongodb.com/download-center#community
- 在线文档 https://docs.mongodb.com/manual/introduction/
使用yum方式安装
仅供学习参考,若在生产环境中部署请注意修改安全配置。
- 整个mongodb(社区版)包含如下软件
软件名称 | 描述 |
---|---|
mongodb-org-server | 包含mongod守护程序和关联的配置和init脚本 |
mongodb-org-mongos | 包含mongos守护程序 |
mongodb-org-shell | 包含mongo shell,它是一个连接mongodb的命令行客户端,允许用户直接输入nosql语法管理数据库。 |
mongodb-org-tools | 包含以下工具的MongoDB:数据导入、导出、备份、恢复等等 |
- 创建yum源文件
1 | vim /etc/yum.repos.d/mongodb-org-3.4.repo1 |
- 把下面的内容复制到上面的文件中
1 | [mongodb-org-3.4] |
- 启动yum命令开始安装
1 | yum install -y mongodb-org1 |
- 如果使用SELinux,则必须配置SELinux,以允许在基于Red Hat Linux的系统(Red Hat Enterprise Linux或CentOS Linux)上启动MongoDB。
1 | vim /etc/selinux/config |
关闭THP
自CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(比如说Oracle、MariaDB、MongoDB等),否则可能会导致性能出现下降。
首先检查THP的启用状态:不关闭mongo启动的时候会警告。
1 | // 检查THP状态 |
1 | //禁用THP,编辑rc.local文件 |
编辑完了需要重启服务器才能生效。
配置信息
mongo配置文件操作
安装完后寻找相关配置信息
whereis mongd
mongod: /usr/bin/mongod /etc/mongod.conf /usr/share/man/man1/mongod.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
- mongd.conf 就是配置文件。
- 打开就可以看到相关配置信息。
### mongdb权限操作配置信息
#### Built-In Roles(内置角色):
- 数据库用户角色:
- 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数据库中可用。超级账号,超级权限。
### 开启用户权限
> 提示:即便设置了账号密码依然可以不通过密码链接,需要在mongo 启动的时候开启认证。
- 创建用户
- 注意读写用户的权限请使用readWrite。
```json
show dbs;
//显示数据库列表
use admin;
//进入admin collections
db.createUser({"user":"root","pwd":"z201.com","roles":[{"role":"root","db":"admin"}]})
//创建超级管理员root库管理账号
db.auth("root","eoner.com")
//校验账号是否匹配
1
//显示1表示匹配成功
user yisheng;
//进入yisheng collections,如果没有该数据库会自己创建一个;但是如果不在里面插入数据是不显示出来的。
db.createUser({"user":"yisheng","pwd":"z201.com","roles":[{"role":"readWrite","db":"yisheng"}]})
//创建数据库管理员
db.auth("yisheng","z201.com")
1
//显示1表示匹配成功修改密码
1 | db.changeUserPassword('root','z201.com'); |
- 数据库开启认证,注意请进入数据库中在执行。
1 | security: |
基础操作
启动
1 | systemctl start mongod |
重启
1 | systemctl restart mongod |
如果无效
- use admin
- db.shutdownServer();
停止
1 | systemctl stop mongod |
认证模式启动
1 | nohup mongod --auth --port 27017 --dbpath /var/lib/mongo/ & |
- /var/bin/mongd 可以在mongod.conf中查看。
客户端连接失败问题:
SCRAM-SHA-1 authentication failed ``for
root
mongodb加入了SCRAM-SHA-1校验方式,需要第三方工具配合进行验证。如果直接用代码连接会出问题。
如果客户端没有SCRAM-SHA-1的校验方式,可以选择将authverison 版本降低;不使用该认证方式,同时工具连接的时候需要手动修改默认的认证方式。
参考文献
CURD
- 插入
1 | db.ops_dev.insert({title: 'MongoDB ', |
其他注意事项
mongodb进程莫名退出
每天早上到公司发现Mongo都会自己关闭掉。
1 | 2018-01-03T18:21:03.135+0800 I CONTROL [signalProcessingThread] got signal 1 (Hangup), will terminate after current cmd ends |
- 天啦噜有人发送了Hangup。。。好比
kill -1 pid
,但可以确认的是没有人手动信号给mongodb进程。 - 然后网上找了很久发现了这篇文档 Signals
Bash resends a SIGHUP to all jobs if it receives a SIGHUP itself; this would include mongod.
Also, if you happen to have huponexit turned on, every job will receive a SIGHUP when bash exits.
shell登进之后启动了mongo,然后退出shell使用的方式是直接关掉窗口,linux认为这是一起异常退出,这样一来这个shell进程就会收到SIGHUP信号,为了保证状态一致性,从而给它的所有子进程发送SIGHUP信号.而使用命令exit退出就不会有这种问题,因为linux会认为这是一种正常的退出。
mongodb官方文档会发现mongo有–-fork这样的一个参数,使用该参数启动mongo时,会自动将其挂到init进程(pid为1)下启动,而不加的话ppid(父进程id)就是当前的shell进程。
- 如果使用了 fork 参数就必须添加 logpath
1 | mongod --fork --auth --port 27017 --dbpath /var/lib/mongo/ --logpath /opt/mongod/mongod.log |
安全的推出方式
一定要以命令方式关闭
关闭服务时,一定要注意,用–shutdown命令关闭,既方便又安全。