zoukankan      html  css  js  c++  java
  • 通过mongodump和mongorestore实现Mongodb备份和恢复

    Mongodb自带了mongodump和mongorestore这两个工具来实现对数据的备份和恢复。

    mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。

    mongodump用法如下:

    [root@localhost mongodb]# ./bin/mongodump --help
    Export MongoDB data to BSON files.
    
    options:
      --help                   produce help message
      -v [ --verbose ]         be more verbose (include multiple times for more 
                               verbosity e.g. -vvvvv)
      --version                print the program's version and exit
      -h [ --host ] arg        mongo host to connect to ( <set name>/s1,s2 for 
                               sets)
      --port arg               server port. Can also use --host hostname:port
      --ipv6                   enable IPv6 support (disabled by default)
      -u [ --username ] arg    username
      -p [ --password ] arg    password
      --dbpath arg             directly access mongod database files in the given 
                               path, instead of connecting to a mongod  server - 
                               needs to lock the data directory, so cannot be used 
                               if a mongod is currently accessing the same path
      --directoryperdb         if dbpath specified, each db is in a separate 
                               directory
      --journal                enable journaling
      -d [ --db ] arg          database to use
      -c [ --collection ] arg  collection to use (some commands)
      -o [ --out ] arg (=dump) output directory or "-" for stdout
      -q [ --query ] arg       json query
      --oplog                  Use oplog for point-in-time snapshotting
      --repair                 try to recover a crashed database
      --forceTableScan         force a table scan (do not use $snapshot)
    参数说明:

    -h:指明数据库宿主机的IP

    -u:指明数据库的用户名

    -p:指明数据库的密码

    -d:指明数据库的名字

    -c:指明collection的名字

    -o:指明到要导出的文件名

    -q:指明导出数据的过滤条件

    具体使用示例如下:

    [root@localhost mongodb]# ./bin/mongodump -d test -o data/backup
    connected to: 127.0.0.1
    DATABASE: test	 to 	data/backup/test
    	test.system.indexes to data/backup/test/system.indexes.bson
    		 9 objects
    	test.users to data/backup/test/users.bson
    		 3 objects
    	test.games to data/backup/test/games.bson
    		 1 objects
    	test.blog.post to data/backup/test/blog.post.bson
    		 1 objects
    	test.lists to data/backup/test/lists.bson
    		 1 objects
    	test.math to data/backup/test/math.bson
    		 1 objects
    	test.map to data/backup/test/map.bson
    		 8 objects
    	test.my_collection to data/backup/test/my_collection.bson
    		 0 objects
    	test.foo to data/backup/test/foo.bson
    		 6 objects
    	test.system.users to data/backup/test/system.users.bson
    		 1 objects
    mongorestore是Mongodb从备份中恢复数据的工具,它主要用来获取mongodump的输出结果,并将备份的数据插入到运行的Mongodb中。

    mongorestore命令使用方法如下:

    [root@localhost mongodb]# ./bin/mongorestore --help
    usage: ./bin/mongorestore [options] [directory or filename to restore from]
    options:
      --help                  produce help message
      -v [ --verbose ]        be more verbose (include multiple times for more 
                              verbosity e.g. -vvvvv)
      --version               print the program's version and exit
      -h [ --host ] arg       mongo host to connect to ( <set name>/s1,s2 for sets)
      --port arg              server port. Can also use --host hostname:port
      --ipv6                  enable IPv6 support (disabled by default)
      -u [ --username ] arg   username
      -p [ --password ] arg   password
      --dbpath arg            directly access mongod database files in the given 
                              path, instead of connecting to a mongod  server - 
                              needs to lock the data directory, so cannot be used 
                              if a mongod is currently accessing the same path
      --directoryperdb        if dbpath specified, each db is in a separate 
                              directory
      --journal               enable journaling
      -d [ --db ] arg         database to use
      -c [ --collection ] arg collection to use (some commands)
      --objcheck              validate object before inserting
      --filter arg            filter to apply before inserting
      --drop                  drop each collection before import
      --oplogReplay           replay oplog for point-in-time restore
      --keepIndexVersion      don't upgrade indexes to newest version
    参数说明:

    -h:指明数据库宿主机的IP

    -u:指明数据库的用户名

    -p:指明数据库的密码

    -d:指明数据库的名字

    -c:指明collection的名字

    -o:指明到要备份的文件名

    -q:指明备份数据的过滤条件

    具体使用示例如下:

    [root@localhost mongodb]# ./bin/mongorestore -d test --drop data/backup/test/
    connected to: 127.0.0.1
    Tue Aug 14 01:18:17 data/backup/test/games.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.games]
    Tue Aug 14 01:18:17 	 dropping
    1 objects found
    Tue Aug 14 01:18:17 data/backup/test/foo.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.foo]
    Tue Aug 14 01:18:17 	 dropping
    6 objects found
    Tue Aug 14 01:18:17 data/backup/test/blog.post.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.blog.post]
    Tue Aug 14 01:18:17 	 dropping
    1 objects found
    Tue Aug 14 01:18:17 data/backup/test/lists.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.lists]
    Tue Aug 14 01:18:17 	 dropping
    1 objects found
    Tue Aug 14 01:18:17 data/backup/test/map.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.map]
    Tue Aug 14 01:18:17 	 dropping
    8 objects found
    Tue Aug 14 01:18:17 data/backup/test/math.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.math]
    Tue Aug 14 01:18:17 	 dropping
    1 objects found
    Tue Aug 14 01:18:17 data/backup/test/system.users.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.system.users]
    1 objects found
    Tue Aug 14 01:18:17 data/backup/test/my_collection.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.my_collection]
    Tue Aug 14 01:18:17 	 dropping
    Tue Aug 14 01:18:17 file data/backup/test/my_collection.bson empty, skipping
    Tue Aug 14 01:18:17 data/backup/test/users.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.users]
    Tue Aug 14 01:18:17 	 dropping
    3 objects found
    Tue Aug 14 01:18:17 data/backup/test/system.indexes.bson
    Tue Aug 14 01:18:17 	 going into namespace [test.system.indexes]
    Tue Aug 14 01:18:17 	 dropping
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.users", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.games", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.blog.post", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.lists", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.math", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.map", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { gps: "2d" }, ns: "test.map", name: "gps_", min: -180.0, max: 181.0 }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.foo", name: "_id_" }
    Tue Aug 14 01:18:17 { key: { _id: 1 }, ns: "test.system.users", name: "_id_" }
    9 objects found


    备注:还原指定数据库,数据文件需要指定到备份文件下面的子目录,如果不指定子目录,会报以下错误。
    [root@localhost Desktop]# mongorestore -u rex -p 123456 -d test /var/lib/mongo/mongobak/
    connected to: 127.0.0.1
    ERROR: root directory must be a dump of a single database
           when specifying a db name with --db
           use the --help option for more information
    正确做法:[root@localhost Desktop]# mongorestore -u rex -p 123456 -d test /var/lib/mongo/mongobak/test/

    另:使用--drop可在恢复前删除集合(若存在),否则数据就会与现有集合数据合并,可能会覆盖一些文档.
    [root@localhost Desktop]# mongorestore -u rex -p 123456 -d test --drop /var/lib/mongo/mongobak/test/


    参考文章:

    http://chenzhou123520.iteye.com/blog/1630993

  • 相关阅读:
    超神头文件
    世界上还有比二分更容易错的算法吗?
    【POJ 1734】Sightseeing trip
    P1303 A*B Problem
    P1601 A+B Problem(高精)
    P1051 谁拿了最多奖学金
    【P1025】数的划分
    P1005 矩阵取数游戏
    P1006 传纸条
    邮票问题
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061113.html
Copyright © 2011-2022 走看看