一. 命令行操作
- 使用count():
db.test.count()
- 使用eval
在启动时输入:>mongo --eval="printjson(db.test.count())"
二. 进程控制
查看活动进程:
>db.currentOp()
查看当前活动的进程结束进程:
db.killOp(进程号Opid)
//结束Opid号进程
三. 监控
MongoDB DBA很重要的工作就是监控系统的状态和性能。
使用管理接口
启动mongodb时,默认会启动一个基本的HTTP服务器,服务器的监听端口号比主服务的端口号大1000。启动后,在浏览器输入http://localhost:28017,可以看到管理接口(如果启动了–port指定接口,则HTTP端口比这个大1000),可以看到断言,锁,索引,复制等信息serverStatus
使用:>db.runCommand({"serverStatus":1})
查看服务器信息
不再赘述结果,提供代码说明:
globalLock: 表示全局写入锁占用了服务器多少时间
mem: 包含服务器内存映射了多少数据
indexCounters: 表示B树在磁盘检索和内存检索的次数,如果这个比值看是上升就要考虑添加内存了,否则性能低下
backgroundFlushing: 表示后台做了多少次fsync以及时间
opcounters: 包含每种主要操作的次数
asserts: 统计了断言的次数
注意:
serverStatus结构中的所有技术都是在服务器启动时计算的,多国过大就会复位。发生复位所有计数器都会复位,asserts中的roolovers值会增加mongostat
mongostat输出一些serverStatus提供的重要信息。每秒输出新的一行,多个列,和serverStatus相对应,在启动时输入:
>mongostat
,按control+c停止,结果不赘述,提供代码说明:
insert: 每秒插入量
query: 每秒查询量
update: 每秒更新量
delete: 每秒删除量
locked: 锁定量
qr|qw : 客户端查询排队长度(读|写)
ar|aw: 活跃客户端量(读|写)
conn: 连接数
time: 当前时间
四. 数据导出mongoexport
如果需要将数据导入或导出,可以使用MongoDB提供的mongoexport和mongoimport工具:
1. 常用导出方法
>mongoexport -d test -c t1 -o t1.dat
代码说明:
- -d: 指明使用的库
- -c: 指明要导出的集合
- -o: 指明要导出的文件名,也可以指定路径
2.导出CSV格式的文件
>mongoexport -d test -c t1 -csv -f num -o t1.dat
代码说明:
- -csv: 指明导出为CSV格式
- -f : 指明需要导出哪些例
五. 数据导入mongoimport
- 导入JSON数据
>mongoimport -d test -c t1 -file t1.dat
将t1.dat文件导入test库中的t1集合中,会隐式创建集合结构
2.导入CSV数据:
>mongoimport -d test -c t1 --type csv --headerline -file t1.dat
- -type: 指明导入文件格式
- -headerline:指明不导入第一行,因为第一行是列名
- –file:指明要导入的文件路径
六. 数据备份和修复
- 数据文件备份:在关闭服务器情况下,直接复制数据目录db
- 运行时备份mongod
>mongodump -d test
备份test数据库的数据,此时会在当前目录下创建一个dump目录,用于存放备份出来的文件,也可以指定备份存放的目录:
>mongodump -d test -o D:\data\dump
3.数据恢复mongorestore
mongorestore获取mongodump的输出结果,并将备份的数据插入到运行的MongoDB实例中
>mongorestore -d test dump/*
4.fsync和锁
mongodump和mongorestore失去了获取实时数据视图的能力。而fsync命令能在MongoDB运行时复制数据目录并且不会损毁数据:
>db.runCommand({ "fsync":1 , "lock":1 })
有了fsync命令,就可以不用停掉服务器,也不用牺牲备份的实时特性。只是会导致写入操作暂时被阻塞。唯一不耽误读写还能保证实时快照的备份方式就是从服务器备份
数据备份好了,就要进行解锁:
>db.$cmd.sys.unlock.findOne()
>db.currentOp()
运行db.currentOp查看结果
5.从属备份
前面的方法不但可以用到主服务器上,也可以用在从服务器上,而且效果非常好,推荐使用。
6.数据恢复:
>db.repairDatabase()
//恢复数据