民工哥 MongoDB 教程:MD 常用管理命令与授权认证

2023-06-0515:34:18数据库教程Comments939 views字数 5482阅读模式

MongoDB 常用命令

常用命令

mongo         #登陆命令
mongod        #启动命令
mongodump     #全备导出,压缩格式
mongorestore  #恢复
mongoexport   #备份导出,可读的json格式
mongoimport   #恢复
mongos        #集群分片
mongotop      #查看mongo的运行状态
mongostat     #查看mongo的运行状态

批量写入mongodb数据观察负载

> for(i=1;i<10000;i++){ db.hash.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()})}
WriteResult({ "nInserted" : 1 })

[mongo@mongodb-1 ~]$ mongotop 
民工哥 MongoDB 教程:MD 常用管理命令与授权认证

使用mongostat观察负载

  • 默认一秒打印一次
  • 使用-n参数可以只打印一次
  • mongostat -n 1
[mongo@mongodb-1 ~]$ mongostat 
insert query update delete getmore command dirty used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     2|0  0.0% 0.8%       0  995M 60.0M 0|0 1|0   158b   66.2k    5 Feb 13 23:00:39.404
    *0    *0     *0     *0       0     2|0  0.0% 0.8%       0  995M 60.0M 0|0 1|0   158b   65.9k    5 Feb 13 23:00:40.404
    *0    *0     *0     *0       0     2|0  0.0% 0.8%       0  995M 60.0M 0|0 1|0   215b   66.1k    5 Feb 13 23:00:41.405
    *0    *0     *0     *0       0     2|0  0.0% 0.8%       0  995M 60.0M 0|0 1|0   158b   66.0k    5 Feb 13 23:00:42.403

民工哥 MongoDB 教程:MD 常用管理命令与授权认证更多关于 MongoDB 数据库的学习文章,请参阅:NoSQL 数据库之 MongoDB ,本系列持续更新中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

mongostat字段解释
insert/s #官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作
query/s #每秒的查询操作次数
update/s  #每秒的更新操作次数
delete/s  #每秒的删除操作次数
getmore/s #每秒查询cursor(游标)时的getmore操作数
command  #每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分表代表 本地|复制 命令
注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大)

dirty  #仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比
used  #仅仅针对WiredTiger引擎,官网解释是正在使用中的缓存百分比
flushes:
For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间
For MMAPv1 引擎:每秒执行fsync将数据写入硬盘的次数
注:一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了

vsize  #虚拟内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
res    #物理内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存。

qr  # 客户端等待从MongoDB实例读数据的队列长度
qw  #客户端等待从MongoDB实例写入数据的队列长度
ar  # 执行读操作的活跃客户端数量
aw  # 执行写操作的活客户端数量
注:如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了

netIn   #MongoDB实例的网络进流量
netOut  #MongoDB实例的网络出流量
注:此两项字段表名网络带宽压力,一般情况下,不会成为瓶颈

conn  #打开连接的总数,是qr,qw,ar,aw的总和
注:MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数,maxIncomingConnections

MongoDB数据库授权认证

与用户相关的命令

db.auth() #将用户验证到数据库。
db.changeUserPassword() #更改现有用户的密码。
db.createUser() #创建一个新用户。
db.dropUser() #删除单个用户。
db.dropAllUsers() #删除与数据库关联的所有用户。
db.getUser() #返回有关指定用户的信息。
db.getUsers() #返回有关与数据库关联的所有用户的信息。
db.grantRolesToUser() #授予用户角色及其特权。
db.removeUser() #已过时。从数据库中删除用户。
db.revokeRolesFromUser() #从用户中删除角色。
db.updateUser() #更新用户数据。

配置mongodb登陆授权认证

创建一个用户
> use admin
> db.createUser(
{
   user: "admin",
   pwd: "123456", 
   roles: [ { role: "root", db: "admin" } ]   //指定角色为root,表示管理员
}
> db.getUsers()
民工哥 MongoDB 教程:MD 常用管理命令与授权认证
修改配置文件启用用户认证
[mongo@mongodb-1 ~]$ vim /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 
security:
  authorization: enabled
重启mongodb
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
killing process with pid: 17899
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 
about to fork child process, waiting until server is ready for connections.
forked process: 18511
child process started successfully, parent exiting
使用口令登陆mongodb
[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
MongoDB shell version v4.0.14
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ae65176e-ac6b-4906-b621-496996381417") }
MongoDB server version: 4.0.14
> show dbs

使用口令登陆后会发现最后一个警告信息也会消失民工哥 MongoDB 教程:MD 常用管理命令与授权认证文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

授权用户并赋予多个权限

mongodb可以创建多个用户并针对不同的库进行不同的操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

创建用户并制造数据
1.创建用户
[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
> db.createUser(
...   {
...     user: "mytest",
...     pwd: "123456", 
...     roles: [ { role: "readWrite", db: "test" },  //可读可写
...              { role: "read", db: "test2" }   ]     //可读
...   }
... )

2.插入数据
test库
> use test
> db.test.insert({"name":"xiaoming","age":10})
> db.test.insert({"name":"xiaohong","age":10})
> db.test.insert({"name":"xiaolan","age":10})

test2库
> use test2
> db.test2.insert({"name":"jiangxl","job":"it","age":"99"})
> db.test2.insert({"name":"wanger","job":"it","age":"99"})
民工哥 MongoDB 教程:MD 常用管理命令与授权认证
使用mytest登录test库验证权限
1.登录mytest用户并连接到tets库
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.查看所有表
> show tables
hash
test

3.查看是否有读权限
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }

4.查看是否有写入权限
> db.test.insert({"name":"xiaozhang","age":10})

5.查看是否写入成功
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }
{ "_id" : ObjectId("602c74f949b9d3f400ed866b"), "name" : "xiaozhang", "age" : 10 }

可读可写民工哥 MongoDB 教程:MD 常用管理命令与授权认证文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

使用mytest登录test2库验证权限

由于普通用户只能登录test库因此想要切换其他库,只能是登陆test库后使用use进行切换文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

1.登录test库
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.切换到tets2库
> use test2

3.查看表
> show tables
test2

4.查看表中数据
> db.test2.find()

5.插入一条数据,查看是否插入成功
> db.test2.insert({"name":"xiaozi","job":"it","age":"99"})
WriteCommandError({
 "ok" : 0,
 "errmsg" : "not authorized on test2 to execute command { insert: \"test2\", ordered: true, lsid: { id: UUID(\"6203f7df-d8f8-4880-aab3-4db712ae785f\") }, $db: \"test2\" }",
 "code" : 13,
 "codeName" : "Unauthorized"
})

可以看到只能读取,不能插入民工哥 MongoDB 教程:MD 常用管理命令与授权认证文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html

来源:https://jiangxl.blog.csdn.net/article/details/122185659   https://jiangxl.blog.csdn.net/article/details/122185708
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/44761.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/44761.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定