mongodb的备份与恢复

openkk 12年前

mongodb提供了两个命令来备份(mongodump )和恢复(mongorestore )数据库。

1.备份(mongodump )

用法 :

[root@web3 3]# mongodump --help  options:  --help                   produce help message  -v [ --verbose ]         be more verbose (include multiple times for more   verbosity e.g. -vvvvv)  -h [ --host ] arg        mongo host to connect to ("left,right" for pairs)  -d [ --db ] arg          database to use  -c [ --collection ] arg  collection to use (some commands)  -u [ --username ] arg    username  -p [ --password ] arg    password  --dbpath arg             directly access mongod data files in the given path,  instead of connecting to a mongod instance - 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  -o [ --out ] arg (=dump) output directory


例子:
[root@web3 ~]# mongodump -h 192.168.1.103 -d citys -o /backup/mongobak/3  connected to: 192.168.1.103  DATABASE: citys  to     /backup/mongobak/3/citys  citys.building to /backup/mongobak/3/citys/building.bson  13650 objects  citys.system.indexes to /backup/mongobak/3/citys/system.indexes.bson  1 objects


备份出来的数据是二进制的,已经经过压缩。比实际数据库要小很多,我的数据库显示占用了260多M,备份后只有2M。

2.恢复(mongorestore )

用法:
[root@web3 3]# mongorestore --help  usage: 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)  -h [ --host ] arg       mongo host to connect to ("left,right" for pairs)  -d [ --db ] arg         database to use  -c [ --collection ] arg collection to use (some commands)  -u [ --username ] arg   username  -p [ --password ] arg   password  --dbpath arg            directly access mongod data files in the given path,   instead of connecting to a mongod instance - 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  --drop                  drop each collection before import  --objcheck              validate object before inserting    --drop参数可以在导入之前把collection先删掉。


例子:

[root@web3 3]# mongorestore -h 127.0.0.1 --directoryperdb /backup/mongobak/3/           connected to: 127.0.0.1  /backup/mongobak/3/citys/building.bson  going into namespace [citys.building]  13667 objects  /backup/mongobak/3/citys/system.indexes.bson  going into namespace [citys.system.indexes]  1 objects</pre> 


</span></span>

另外mongodb还提供了mongoexport 和 mongoimport 这两个命令来导出或导入数据,导出的数据是json格式的。也可以实现备份和恢复的功能。

例:

mongoexport -d mixi_top_city_prod -c building_45 -q '{ "uid" : "10832545" }' > mongo_10832545.bson    mongoimport -d mixi_top_city -c building_45 --file mongo_10832545.bson