MongoDB 备份与恢复的实践

来源:互联网 发布:大数据技术具体应用 编辑:程序博客网 时间:2024/04/20 14:24

网站运行了不少日子了,一些数据需要备份。今天研究了下MongoDB的一些有关备份的方法:

1)使用mongodump和mongorestore工具:(参见http://cn.docs.mongodb.org/master/reference/program/mongodump/)

使用起来很简单,在任何目录执行mongodump就行了(把mongodb安装路径下的bin加到环境变量path里面),它会自动连接到MongoDB数据库(通过默认host名和默认端口号),然后把dump出来的内容保存在名为dump的子目录下,每个database一个目录,一个collection生成2个文件(bson和json)文件:json文件是collection的定义,bson是二进制的数据,可以用mongodb的另外一个自带工具bsondump来查看(压缩率大概是85%+)。恢复的话,也简单,在同一目录下执行 mongorestore dump就行了,他会把数据全部导回去。具体的一些参数和细节,可以官方文档。


2)使用db.copyDatabase(...)命令来整个复制远程数据库:(参见http://docs.mongodb.org/manual/reference/method/db.copyDatabase/)

我本地新装了MongoDB,想备份远程MongoDB的所有数据,就需要用到这个命令,在mongo.exe的命令行输入:

> db.copyDatabase("CERConfig", "CERConfig", "cerreport.xxx.com"){ "ok" : 1 }> db.copyDatabase("CERDataCache", "CERDataCache", "cerreport.xxx.com"){ "ok" : 1 }> show dbsCERConfig       0.203125GBCERDataCache    3.9521484375GBlocal   0.078125GBtest    (empty)
第一个参数是远程数据库的Database名字,第二个参数是拷贝到本地的哪个数据库,第三个参数是远程数据库的host名。也很简单。


3)使用db.repairDatabase()来压缩数据库:(参见http://docs.mongodb.org/manual/reference/command/repairDatabase/#dbcmd.repairDatabase)
用的时间长了MongoDB就变得很大,需要清理一下,用这个命令就可以,先用use命令切换到哪个数据库,然后执行db.repairDatabase()就行。注意,最好把数据库停掉再压缩。


4) 使用主从备份机制:(参见http://database.51cto.com/art/201107/278632_1.htm)

启动master数据库:

bin\mongod --logpath "C:\CERWeb\mongodb\log\mongod.log" --dbpath "C:\CERWeb\mongodb\data" --master
启动slave数据库:

bin\mongod --dbpath "C:\CERWeb2\mongodb\data" --slave --source cerreport.xxx.com
好了,一旦从数据库启动,就会自动sync数据,可以在很明显的在控制台看到他辛勤的劳作~


其他参考:

http://database.51cto.com/art/201107/278632_1.htm

http://blog.csdn.net/wangpeng047/article/details/7705588

http://www.2cto.com/database/201307/224647.html

http://www.cr173.com/html/19181_1.html





原创粉丝点击