MongoDB 备份恢复

搭建高可用的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的结果重新创造。

 

 

 

posted on 2015-03-09 10:04  迷茫中寻找方向  阅读(447)  评论(0编辑  收藏  举报

导航