前言
本文主要涉及一下内容:数据库的备份和恢复,对于任一数据库来说备份至关重要;数据的导入和导出;数据库修复;数据库状态监控工具mongostat;在使用过程遇到其他命令会总结在此。
1.数据库的备份和恢复
1.1 复制数据文件
备份:使用此方法时必须保证数据文件不发生变化,可以使用fsynclock命令,> db.fsyncLock()
一旦运行该命令,就会锁定数据库,禁止任何写入,并进行同步,把数据刷到磁盘。当命令返回后,就可以复制数据文件了,如备份名为myDB的数据库,只需复制所有名为myDB.*的文件,如果使用了—directoryperdb选项,只需复制该数据库对应的整个数据目录。复制完成后,使用> db.fsyncUnlock()解锁数据库。
注意:如果启用了身份验证,那么,在调用fsyncLock和fsyncUnlock期间不要关闭shell否则只能重启mongod服务了。
恢复:保证mongod服务没启动,待恢复目录为空,将备份的数据文件拷贝到数据库目录,最后启动mongod服务即可。
1.2 使用mongodump
使用mongodump可以单独备份数据库,集合,只不过备份和恢复的比较慢。可以使用mongodump –help查看可用选项。
备份:
备份整个foo数据库
mongodump –h 127.0.0.1:30000 –d foo –o /data/dbback/foo
备份foo数据库中的bar集合
mongodump –h 127.0.0.1:30000 –d foo –c foo.bar –o /data/dbback/foo/bar
备份多个集合,foo中的bar,info集合,使用逗号隔开
mongodump –h 127.0.0.1:30000 –d foo –c foo.bar, foo.infi –o /data/dbback/foo/cols
恢复:
使用mongorestore命令,其中有两个选项值得一提:
--drop:在恢复前删除现有集合,否则直接插入现有集合中
--noobjcheck:忽略对象插入集合之前的验证步骤
恢复单个数据库
mongorestore –h 127.0.0.1:30000 –d foo –dir /data/dbback/foo
恢复单个集合
mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar –dir /data/dbback/foo/bar
恢复多个集合
mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar,foo.infi –dir /data/dbback/foo /cols
1.3 备份副本集
直接使用复制数据文件的方式备份,这种方式备份副本集时无需做任何修改。
1.4 备份分片集群
第一步:关闭均衡器,
第二步:连接mongos执行mongodump备份
第三步:启用均衡器,
恢复备份的话,使用mongorestore连接到一个mongos执行即可
备份单个分片和备份单个服务器一样。
2.数据的导入和导出
数据导入导出就是两个命令:mongoimport和mongoexport
mongoimport,可以把CSV, TSV或者JSON格式的数据导入mongodb,其中几个有用的选项:
--headerline:对于CSV,TSV格式文件,使用第一行作为字段名称
--drop:导入前删除集合,否则追加集合后面
--ignoreblanks:不导入空字段
mongoimport –h 127.0.0.1:30000 –d foo –c foo.bar –type csv –headerline < csvfile
mongoexport,可以把mongodb数据导出JSON,CSV格式的文件。其中几个有用的选项:
--q:指定查询条件导出数据,默认为{}
--f:指定导出的字段名称
mongoexport –h 127.0.0.1:30000 –d foo –c foo.bar –q {} –type=csv > bar.csv
3.数据库状态监控
使用mongostat默认每一秒输出服务当前状态,输出主要字段说明表,使用方法mongostat –port 30000。
使用db.currentOp()可以查看数据库当前执行的操作有哪些。
表1 mongostat字段说明
insert |
每秒插入的次数 |
query |
每秒查询的次数 |
update |
每秒更新的次数 |
delete |
每秒删除的次数 |
getmore |
每秒查询游标getmore次数 |
command |
每秒执行的命令树,除增删改查,还有其它统计命令 |
flushes |
每秒执行fsync将数据写入磁盘的次数 |
mapped |
所有被mmap映射进内存的数据量,单位M |
vsize |
虚拟内存使用量,单位M |
res |
物理内存使用量,单位M |
faults |
每秒访问失败的次数,当faults居高不下时,一般是以下几个原因: 1. 磁盘空间不足 2. 内存不足 3. 磁盘IO达到瓶颈 |
qr|qw |
表示读,写队列,高并发时队列的值一般会升高 |
ar|aw |
表示活跃的读,写客户端数 |
netIn |
每秒通过网络输入的字节数 |
netOut |
每秒通过网络输出的字节数 |
conn |
服务器打开的连接数,包括输入和输出连接 |