MongoDB备份、恢复/监控
备份、恢复
备份的语法
mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
恢复的语法
mongorestore -h <hostname><:port> -d dbname <path>
--host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir:指定备份的目录。你不能同时指定 <path> 和 --dir 选项。
- 备份数据库
mongodump -d alice -o /root/alice
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
- 恢复数据库
mongorestore -d alice --drop /root/alice
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
- 备份集合**(备份dat文件)**
mongoexport -d alice -c test1 -o /root/test1.dat
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -o 文件存在路径
- 恢复整个集合非csv文件
mongimport -d alice -c test1 --upsert --drop /root/test.dat
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名
- 备份字段**(备份csv文件)**
mongoexport -d alice -c test1 -f name --type=csv -o /root/name.csv
- 恢复字段
mongoimport -d alice -c test1 --type=csv --headerline --upsert --drop /root/name.csv
- 恢复部分字段
mongoimport -d alice -c test1 --upsertFields age --drop name.json
监控
在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能。这样在大流量得情况下可以很好的应对并保证MongoDB正常运作。
mongostat命令
mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。
mongostat
或者
mongostat --host 172.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提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。
mongotop
- ns:数据库命名空间
- db:数据库的名称
- total:mongod在这个命令空间上花费的总时间
- read:在这个命令空间上mongod执行读操作花费的时间
- write:在这个命名空间上mongod进行写操作花费的时间