MongoDB使用自带的命令行工具进行备份和恢复的教程
要备份一个数据库,
mongorestore-ddb/path/to/back_up
例如:
mongodump-dbookstore-o/data01/db_backup/
该命令会dump出该DB所有的collection
从备份文件夹恢复数据
mongorestore-dbookstore/data01/db_backup/bookstore
只备份或回复指定的collection
以bookstoreDB中statistics表为例
mongodump-dbookstore-cstatistics-o/data01/db_backup/
然后restore时指定该collection对应的bson文件
mongorestore-dbookstore-cstatistics/data01/db_backup/bookstore/statistics.bson
通过条件查询dump
还可以通过一个query来dump中一个collection中符合条件的某些记录,例如
mongodump-dbookstore-cnovel_sources-q"{\"tag\":\"tag_11\"}"-o/data01/db_backup/
要注意的是如果query中有$符号,需要转义,例如
mongodump-dqunimei-ccollection_name-q"{\"date\":{\"\$gte\":\"2015-03-25\"}}"-o/path/to/dump
注意事项
mongorestore并不会覆盖已有的记录,而是重复添加(如果可以的话)。
当数据量很大的时候,该方法耗时很大。
直接备份数据文件
mongo127.0.0.1:27017/db_to_back--eval"db.fsyncLock()" rsync-avh--delete/path/to/your/mongofile/path/to/backup/folder/ mongo127.0.0.1:21001/turbo--eval"db.fsyncUnlock()"
关键是第一行和第三行的两个命令,对于db.fsyncLock(),mongodb的文档说明
db.fsyncLock()
Forcesthemongodtoflushallpendingwriteoperationstothediskandlockstheentiremongodinstancetopreventadditionalwritesuntiltheuserreleasesthelockwiththedb.fsyncUnlock()command.db.fsyncLock()isanadministrativecommand.
将mongod未完成的写操作写入数据文件并阻止新的写入操作,知道运行db.fsyncUnlock()命令,因此拷贝数据文件前后要执行这两个命令。
与其他备份恢复工具的对比
mongodb自带的备份工具还有bsondump、mongoexport,恢复工具还有mongoimport,几者之间的具体区别是:
bsondump、mongoexport、mongodump备份工具的对比:
1、bsondump可以指定备份的格式为json和debug模式,这个命令虽然附带,但很少用到;
2、mongoexport可以导出json或csv格式的文件,可以指定查询过滤器或指定输出的域,不过此工具导出的json,csv可能对某些数据类型不兼容,因此可能不能全部数据导出,mongodump就可以全部兼容;
3、mongodump支持过滤,而且在导出速度和压缩率方面mongodump是最快最好的。所以,若无csv或debug等特殊格式的备份需求,一般都使用mongodump作为备份工具。
mongorestore与mongoimport恢复工具的对比:
1、 mongoimport可以接受json,csv,tsv格式的文件,每行为一个对象。同mongoexport一样,其在恢复过程中同样存在兼容性的问题,所以有恢复不完整的概率;
2、mongorestore,速度较慢,比mongoimport慢2.5倍左右,但是根据mongodump导出的数据,可以完整导入数据。在restore过程中,索引根据之前dump的结果重新创造。