MongoDB的管理-深度长文
阅读原文时间:2023年07月09日阅读:2

(1) 启动和停止MongoDB;

Ubuntu18下启动关闭MongoDB
启动MongoDB:
方法一:
systemctl start mongod.service

方法二:
在MongoDB的安装目录下执行
./bin/mongod -f /data/mongod

上面的截图中,是以脚本的方式启动mongodb服务。在/data/mongod.conf配置文件中,配置了以下内容。

1.    #日志文件位置
2.    logpath=/data/db/journal/mongodb.log
3.
4.    # 以追加方式写入日志
5.    logappend=true
6.
7.    # 是否以守护进程方式运行
8.    fork=true
9.
10.    # 默认27017
11.    #port = 27017
12.
13.    # 数据库文件位置
14.    dbpath=/data/db
15.
16.    # 启用定期记录CPU利用率和 I/O 等待
17.    #cpu = true
18.
19.    # 是否以安全认证方式运行,默认是不认证的非安全方式
20.    #noauth = true
21.    #auth = true
22.
23.    # 详细记录输出
24.    #verbose = true
25.
26.    # Inspect all client data for validity on receipt (useful for
27.    # developing drivers)用于开发驱动程序时验证客户端请求
28.    #objcheck = true
29.
30.    # Enable db quota management
31.    # 启用数据库配额管理
32.    #quota = true
33.    # 设置oplog记录等级
34.    # Set oplogging level where n is
35.    #   0=off (default)
36.    #   1=W
37.    #   2=R
38.    #   3=both
39.    #   7=W+some reads
40.    #diaglog=0
41.
42.    # Diagnostic/debugging option 动态调试项
43.    #nocursors = true
44.
45.    # Ignore query hints 忽略查询提示
46.    #nohints = true
47.    # 禁用http界面,默认为localhost:28017
48.    #nohttpinterface = true
49.
50.    # 关闭服务器端脚本,这将极大的限制功能
51.    # Turns off server-side scripting.  This will result in greatly limited
52.    # functionality
53.    #noscripting = true
54.    # 关闭扫描表,任何查询将会是扫描失败
55.    # Turns off table scans.  Any query that would do a table scan fails.
56.    #notablescan = true
57.    # 关闭数据文件预分配
58.    # Disable data file preallocation.
59.    #noprealloc = true
60.    # 为新数据库指定.ns文件的大小,单位:MB
61.    # Specify .ns file size for new databases.
62.    # nssize =
63.
64.    # Replication Options 复制选项
65.    # in replicated mongo databases, specify the replica set name here
66.    #replSet=setname
67.    # maximum size in megabytes for replication operation log
68.    #oplogSize=1024
69.    # path to a key file storing authentication info for connections
70.    # between replica set members
71.    #指定存储身份验证信息的密钥文件的路径
72.    #keyFile=/path/to/keyfile

关闭MongoDB:
方法一:在shell模式下可以直接通过db.shutdownServer()关闭

方法二:还可以直接通过kill -9 进程号杀死mongodb的进程
方法三:mongod --config=/data/mongod.conf –shutdown
方法四:systemctl stop mongod.service

(2)访问控制;

创建管理员用户

  1. 首先进入mongo shell 命令行模式下

  2. 选择admin库,创建root用户

  3. 认证
    db.auth(“username”,”password”)

  4. 修改mongo.conf文件,添加以下内容
    security:
    authorization:enabe

    保存退出后,需要重启mongod服务。

  5. 登录服务
    mongo -u root-p root –authenticationDatabase admin

还可以修改用户的密码:
db.changeUserPassword(“username”,”password”)


删除用户


用户的内置角色

  • 数据库用户角色 read、readWrite;

  • 数据库管理角色 dbAdmin、dbOwner、userAdmin

  • 集群管理角色 clusterAdmin、clusterManager、clusterMonitor hostManager

  • 备份恢复角色 backup、restore

  • 所有数据库角色,只用于admin数据库
    readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

  • 超级用户角色 root 内部角色 __system

(3)命令行操作;

数据库相关

  1. show dbs: 显示数据库列表。
  2. show collections:显示当前数据中的集合
  3. show users: 显示用户
  4. use yourDB: 切换到当前数据库
  5. db.help() :显示数据库操作命令
  6. db.yourCollection.help():显示集合操作命令,yourCollection是集合名字
  7. db.createCollections(‘teacher’):
    创建Collection,其实MongoDB其实在插入数据的时候也会自动创建对应的集合。

插入数据
插入数据也会自动创建集合
插入有两种方式:insert和save
两个都可以不指定_id的值,会自动生成唯一_id

两者的区别是

  • insert时,如果_id已存在,不会再次插入新的值
  • save时,如果_id已存在,会更新原来的值,也就是覆盖

db.student.insert({_id:1,sname:'zhangsan',sage:20}) # 向student表中插入一条数据

删除文档;
db.student.remove({sname:'zhangsan'}) # 删除student表中sname='zhangsan'

修改文档;
语法格式: db.youCollection.update(criteria, objNew, upsert, multi )

  • criteria: update的查询条件,类似sql update查询内where后面的。
  • objNew : update的对象和一些更新的操作符(如$set)等,也可以理解为sql update查询内set后面的。
  • upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false,只修改匹配到的第一条数据。
  • 其中criteria和objNew是必选参数,upsert和multi可选参数

查看数据
db.youCollection.find(criteria, filterDisplay)
criteria :查询条件,可选
filterDisplay:筛选显示部分数据,如显示指定列数据,可选
db.youCollection.find(criteria, filterDisplay).pretty()表示格式化输出

删除collection

  1. db.teacher.drop()

退出shell命令
exit或Ctrl+c

(4)进程控制;

查看MongoDB当前正在做哪些操作
db.currentOp()

查看当前有多少个连接
db.serverStatus().connections

结束进程
db.killOp(1234)
等同于:db.$cmd.sys.killop.findOne{op:1234}

(5)MongoDB的监控;

Mongostat是mongodb自带的状态监测工具,在命令行下使用,他会监测固定时间mongodb的当前运行状态,并输出。

inserts/s每秒插入的次数
query/s,每秒查询的次数;update/s,每秒更新的次数,delete/s,每秒删除的次数;command/s每秒的命令数,conn当前连接数,time是时间戳,vsize,虚拟内存使用量,res代表物理内存使用量,单位是MB。

db.status() #查看分区状态

获取服务器状态,connections中有当前连接数和可用连接数。

mongotop用来跟踪mongodb的实例,提供每个集合的统计数据。默认情况下,mongotop每秒刷新一次。
ns:包含数据库命名空间
db:包含数据库的名称。名为 . 的数据库针对全局锁定,而非特定数据库。
total:mongod花费的时间工作在这个命名空间提供总额。
read:mongod花费在此命名空间执行读操作的时间,
write:mongod花费在这个命名空间进行写操作的时间,

(6)MongoDB数据的导入、导出;

mongodb数据的导出
1、 导出工具:mongoexport
2、 概念:MongoDB的mongoexport工具可以将一个collection导出成JSON或者CSV格式的文件。
3、 语法:
mongoexport -d dbname -c collectionname -o file –type json/csv -f field
-d dbname: 数据库名字
-c collectionname: collection名字
-o 指定导出的文件路径和文件名
-type 导出文件类型,如果是csv,需要指定字段名
-f 后加字段名(例如:_id,user_id,user_name,age,status)

mongodb数据导入: mongoimport
1、 语法:
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

-d :数据库名
-c :collection名
–type :导入的格式默认json
-f :导入的字段名
–headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
–file :要导入的文件

2、 实例
sudo mongoimport -d School-c student --file /usr/local/mongodb/student.json --type json

导入结果查看


(7)MongoDB备份、还原;
MongoDB数据库备份
语法:
mongoddump -h dbhost -d dbname -o dbdirectory

参数说明:
-h: MongoDB服务器所在地址,例如127.0.0.1,当然可以指定端口号:127.0.0.1:27017
-d: 备份数据库实例
-o: 备份数据存放的位置,例如/data/db/mongodump,需要注意的是这个目录需要提前建立

mongodump -h 127.0.0.1 -d School -o /data/db/mongodump

去查看一下是否备份成功

备份成功

MongoDB数据库恢复
语法格式:
mongorestore -h dbhost -d dbname --dir dbdirectory

参数说明:
-h: MongoDB服务器所在地址,例如127.0.0.1,当然可以指定端口号:127.0.0.1:27017
-d: 恢复数据库实例
–dir: 备份数据存放的位置,例如/data/db/mongodump/School
–drop: 这个参数的作用是在恢复的时候,先删除当前数据,再恢复备份的数据。

mongorestore -h 127.0.0.1:27017 -d School --dir /data/db/mongodump/School

先删库,再恢复

恢复School库
mongorestore -h 127.0.0.1:27017 -d School --dir /data/db/mongodump/School

查看是否恢复

恢复成功。