备份
针对于数据库的备份,mongodb与mysql一样提供了对应的命令行工具,mongodump
- 备份数据库
mongodump -d mydb1 -o /root/
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
- 备份数据库
mongodump -d mydb1 -o /root/
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
- 数据库还原
mongorestore -d test --drop /root/mydb1
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
- 导出集合
mongoexport -d mydb1 -c myset -o /root/users.dat
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -o 文件存在路径
- 导出字段
mongoexport -d mydb1 -c myset -f name --type=csv -o /root/myset.csv
- 根据条件导出字段
mongoexport -d mydb1 -c myset -q '{age:{$gte:18}}' -o name.json
- 还原整个集合非csv文件
mongoimport -d mydb1 -c myset --upsert --drop name.json
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名
- 还原部分字段
mongoimport -d mydb1 -c myset --upsertFields age --drop name.json
- 还原导出的csv
mongoimport -d mydb1 -c myset --type=csv --headerline --upsert --drop a.csv
- 还原导出的dat文件
mongoimport -d mydb1 -c myset --upsert users.dat
监控
对mongodb的运行状态进行实时监控,以便于运维人员可以进行数据库运行健康状态的判断
mongostat使用
mongostat --host 127.0.0.1:27017
-
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,阿里工程师建议在5000以下,基本满足多数场景
mongotop使用
mongotop
- ns:数据库命名空间
- db:数据库的名称
- total:mongod在这个命令空间上花费的总时间
- read:在这个命令空间上mongod执行读操作花费的时间
- write:在这个命名空间上mongod进行写操作花费的时间