搭建高可用的MongoDB集群
http://www.csdn.net/article/2014-04-09/2819221-build-high-avialable-mongodb-cluster-part-1
(一)备份和恢复
1.备份(mongodump)
语法
mongodump命令脚本语法如下:
>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目录,这个目录里面存放该数据库实例的备份数据。
实例
[root@datanode1 mongodb2.6.5]# ./bin/mongodump -h 127.0.0.1:27017 -d szc -o /mongodb/dump/ connected to: 127.0.0.1:27017 2015-03-09T15:59:09.168+0800 DATABASE: szc to /mongodb/dump/szc 2015-03-09T15:59:09.169+0800 szc.system.indexes to /mongodb/dump/szc/system.indexes.bson 2015-03-09T15:59:09.169+0800 2 documents 2015-03-09T15:59:09.169+0800 szc.szc_test to /mongodb/dump/szc/szc_test.bson 2015-03-09T15:59:09.169+0800 1 documents 2015-03-09T15:59:09.169+0800 Metadata for szc.szc_test to /mongodb/dump/szc/szc_test.metadata.json 2015-03-09T15:59:09.169+0800 szc.szc_test1 to /mongodb/dump/szc/szc_test1.bson 2015-03-09T15:59:09.170+0800 1 documents 2015-03-09T15:59:09.170+0800 Metadata for szc.szc_test1 to /mongodb/dump/szc/szc_test1.metadata.json [root@datanode1 mongodb2.6.5]#
实例
备份单个集合
[root@datanode1 mongodb]# ./mongodb2.6.5/bin/mongodump -c szc1_test1 -d szc1 -o /mongodb/dump/ connected to: 127.0.0.1 2015-03-09T23:33:37.984+0800 DATABASE: szc1 to /mongodb/dump/szc1 2015-03-09T23:33:37.985+0800 szc1.szc1_test1 to /mongodb/dump/szc1/szc1_test1.bson 2015-03-09T23:33:37.985+0800 1 documents 2015-03-09T23:33:37.985+0800 Metadata for szc1.szc1_test1 to /mongodb/dump/szc1/szc1_test1.metadata.json [root@datanode1 mongodb]# cd dump/ [root@datanode1 dump]# ll 总计 8 drwxr-xr-x 2 root root 4096 03-09 15:59 szc drwxr-xr-x 2 root root 4096 03-09 23:33 szc1 [root@datanode1 dump]# cd szc1 [root@datanode1 szc1]# ll 总计 8 -rw-r--r-- 1 root root 35 03-09 23:33 szc1_test1.bson -rw-r--r-- 1 root root 97 03-09 23:33 szc1_test1.metadata.json [root@datanode1 szc1]# [root@datanode1 szc1]#
2.恢复(mongorestore)
- -h:
MongoDB所在服务器地址
- -d:
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,可以重命名,比如test2
- --dir:
备份数据所在位置,如果是恢复某个数据库(test),则需要指定到数据库备份文件所在路径,/mongodb/dump/szc;如果恢复某个集合,则需要指定到集合所在路径下的.bson文件,例如/mongodb/dump/szc/szc_test.bson
- -C [--collection]
指定需要恢复的集合名称
- dfd
实例
将备份文件中数据库为szc中的集合szc_test恢复,
[root@localhost mongodb]# ./mongodb2.6.5/bin/mongorestore --collection szc_test -d szc --dir /root/mongodb/dump/szc/szc_test.bson connected to: 127.0.0.1 2015-03-09T20:27:54.700+0800 /root/mongodb/dump/szc/szc_test.bson 2015-03-09T20:27:54.700+0800 going into namespace [szc.szc_test] 1 objects found 2015-03-09T20:27:54.732+0800 Creating index: { key: { _id: 1 }, name: "_id_", ns: "szc.szc_test" }
结果如下
[root@localhost mongodb]# ./mongodb2.6.5/bin/mongo
MongoDB shell version: 2.6.5
connecting to: test
> show dbs
admin (empty)
local 0.078GB
szc 0.078GB
> use szc
switched to db szc
> show tables
system.indexes
szc_test
> db.szc_test.find()
{ "_id" : ObjectId("54f91f61166199c99103f2f7"), "name" : "111" }
实例
恢复所有数据库及集合
[root@localhost mongodb]# ./mongodb2.6.5/bin/mongorestore connected to: 127.0.0.1 2015-03-09T23:13:38.571+0800 dump/szc/szc_test1.bson 2015-03-09T23:13:38.571+0800 going into namespace [szc.szc_test1] 1 objects found 2015-03-09T23:13:38.646+0800 Creating index: { key: { _id: 1 }, name: "_id_", ns: "szc.szc_test1" } 2015-03-09T23:13:38.895+0800 dump/szc/szc_test.bson 2015-03-09T23:13:38.895+0800 going into namespace [szc.szc_test] Restoring to szc.szc_test without dropping. Restored data will be inserted without raising errors; check your server log 1 objects found 2015-03-09T23:13:38.952+0800 Creating index: { key: { _id: 1 }, name: "_id_", ns: "szc.szc_test" } [root@localhost mongodb]# ^C
3.导出(mongoexport)
4.导入(mongoimport)
不建议使用mongoexport和mongoimport
因为它不能可靠地获取数据类型信息,所以无法提供完整性的备份。
下四点转自该文章
1.mongoexport 可以导出json或csv格式的文件,可以指定查询过滤器或指定输出的域,不过此工具导出的json,csv可能对某些数据类型不兼容,因此可能不能全部数据导出,mongodump就可以全部兼容 ;
2.mongodump支持过滤 ,而且在导出速度和压缩率方面mongodump是最快最好的 。所以,若无csv或debug等特殊格式的备份需求,一般都使用 mongodump 作为备份工具
3. mongoimport 可以接受json,csv,tsv格式的文件,每行为一个对象 。同mongoexport一样,其在恢复过程中同样存在兼容性的问题,所以有恢复不完整的概率 ;
4.mongorestore,速度较慢,比mongoimport慢2.5倍左右,但是根据mongodump导出的数据,可以完整导入数据。在restore过程中,索引根据之前dump的结果重新创造。