本文永久链接地址:https://www.askmac.cn/archives/mongodb-backup.html
第11回 MongoDB的备份
在本连载中,至此我们一直注目MongoDB的功能方面的内容,这次开始我们将分几回介绍MongoDB的非功能方面的内容。这次我们将说明非功能特点中不可或缺的备份功能。另外,我们将使用MongoDB的最新版本v2.4。
关于命令标记
$ : 用命令行来实行的命令
> : 用mongo shell执行的命令
MongoDB的备份的概要
要对MongoDB进行备份,需要对数据进行备份以及对配置选项进行备份。
配置选项用mongod的启动命令或者配置文件来进行指定。无论那种情况,因为只要复制mongod启动shell以及配置文件等文件就可以进行备份了,所以在这次的文章中将省略说明。
在数据的备份之中,可以将全备份与部分备份来进行组合使用,但在MongoDB v2.4中没有提供增量备份的功能。因此,这次我们介绍全量备份以及restore的方法。
[参考]
增量备份是为了恢复因为人为错误损害的数据而被实现的功能,其功能目的对应MongoDB的延迟复制功能。关于延迟复制功能,请参考官方网站。
要用MongoDB进行全量备份时,有以下两种方法。
- 复制数据文件的方法
- 利用mongodump
复制数据文件的方法
复制数据文件的方法,因为没有数据的转换,所以可以高速进行,因为期间会停止数据库,所有需要进行锁定。大部分情况下,对于replica的secondary,用这样的方法取得备份。当然,偶尔会发生oplog溢出,所以要引起注意。变更oplog的尺寸的方法,请参考官方网站。
让我们来试着复制数据文件吧
首先,让我们试着用复制数据文件的方法来试着进行全备份以及restore吧。数据目录的路径,默认是/data/db。在配置选项中指定dbpath的情况下,这就是数据目录的路径。这次我们将在数据目录是默认——/data/db的情况下进行。
停止mongod,复制每个目录的数据文件。 $ cp -rp /data/db /path/to/backup/mongobackup1-2013-4-24 在此就完成了全备份。可以没有任何问题地重启mongod了。 $ mongod 那么让我们试着在不停止数据库的情况下,使用锁定来进行备份吧。 > use admin > db.fsyncLock() 在此就将数据库锁定了。接下来,我们将复制目录中的每个数据文件。 $ cp -rp /data/db /path/to/backup/mongobackup2-2013-4-24 最后解除锁定。 > db.fsyncUnlock() 在此就可以在不停止数据库的情况下取得备份。
restore
首先停止mongod并删除旧数据目录。 $ rm -rf /data/db 要进行restore,只要对已经复制了的数据目录进行再配置就行了。 $ cp -rp /path/to/backup/mongobackup1-2013-4-24 /data/db 在此,restore就已经完成了。让我们来启动mongod吧。如下所示,有显示无法启动的情况下,请删除旧的锁定文件。 $ mongodold lock file: /data/db/mongod.lock. $ rm /data/db/mongod.lock $ mongod 在此restore就完成了。
让我们来试着使用mongodump的方法吧
那么接下来,让我们来尝试用mongodump的全备份以及restore吧。
mongodump备份
在mongod启动的状态下执行mongodump。 $ mongodump 然后在当前目录中制成dump目录,被保存在每个数据库的转储文件中。 $ ls dump/test/customers.bson ← collection的所有二进制数据 customers.metadata.json ← collection的元数据 system.indexes.bson ← test数据库的系统index
[参考]
通过指定out选项,可以变更转储文件的保存地址。
$ mongodump --out /opt/backup/mongodump-2013-4-24
restore
使用mongodump进行备份的情况下,使用mongorestore进行restore。但是,mongorestore只能使用数据的insert,需要引起注意。换言之,想将数据完全进行restore的情况时,将mongod停止,删除旧数据目录,必须在启动mongod的情况下删除所有的数据库,再执行mongorestore。
这次我们将试着将mongod停止,删除旧数据文件后执行mongorestore的方法。先将mongod停止,然后执行以下命令。 $ rm -rf /data/db 作成/data/db目录,启动mongod。 $ mkdir /data/db$ mongod 在启动mongod的状态下,执行mongorestore。在引数中,需要指定转储文件的路径。 $ mongorestore ./dump 在此完成了restore。
mongodump的选项
在mongodump中有多个的参数,在此,我们介绍一些具有代表性的参数。
用collection单位进行的备份
用db选项指定备份对象的数据库,可以在collection选项中,用collection单位减少备份对象。 $ mongodump --db test --collection customers 指定查询的结果并导出 在-q选项中,可以用询问来指定满足查询条件的数据才导出。 $ mongodump --db test --collection customers -q "{'rank':'Special member'}"
远程备份
使用mongodump,可以在远程机器上执行mongoDB的备份。在实际应用中,为了避免硬件故障,在别的机器上进行转储数据更好。
比如,要取得用host名mongo.example.com的37017port来运行的有认证的mongod的转储文件的话,如下所示。
$ mongodump --host mongo.example.com --port 37017 --username user --password pass
此外的选项中,请参考官方网站的mongodump的页面。mongorestore中也有远程restore以及collection单位的list等很多选项,详细也请参考官方网站的mongorestore的页面。
总结与下次的主题
这次我们介绍了MongoDB的备份。是预防系统故障的措施。为了紧急时刻不丢失重要的数据,需要好好设计备份应用。
下次我们将介绍MongoDB的监控,请大家好好期待!
Comment