介绍
很多现代Web应用程序开发人员今天选择在他们的项目中使用NoSQL数据库,而MongoDB往往是他们的首选。 如果您在生产场景中使用MongoDB,请务必定期创建备份,以避免数据丢失。 幸运的是,MongoDB提供了简单的命令行工具来创建和使用备份。 本教程将解释如何使用这些工具。
要了解备份如何工作而不篡改现有数据库,本教程将首先介绍如何创建新数据库并向其中添加少量数据。 然后,您将创建数据库的备份,然后删除数据库并使用备份进行还原。
先决条件
要跟进,您将需要:
一个64位的Ubuntu 14.04Droplet与Sudo非root用户
MongoDB的3.0.7服务器,你可以通过下面的做安装此MongoDB的安装指南
第1步 - 创建示例数据库
创建空数据库的备份不是非常有用,因此在此步骤中,我们将创建一个示例数据库并向其中添加一些数据。
用一个MongoDB实例交互的最简单的方法是使用mongo
外壳。 与打开它mongo
命令。
mongo
一旦你的MongoDB的提示,创建一个使用被叫MYDATABASE新的数据库use
帮手。
use myDatabase
switched to db myDatabase
在MongoDB数据库中的所有数据应该属于一个集合 。 但是,您不必显式创建集合。 当您使用insert
方法写入到一个不存在的集合,被写入数据之前收集被自动创建。
您可以使用下面的代码,以三个小文件添加到使用名为MyCollection的集合insert
方法:
db.myCollection.insert([
{'name': 'Alice', 'age': 30},
{'name': 'Bill', 'age': 25},
{'name': 'Bob', 'age': 35}
]);
如果插入成功,您会看到如下所示的消息:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
第2步 - 检查数据库的大小
现在,您有一个包含数据的数据库,您可以为它创建一个备份。 但是,如果您有大型数据库,备份将很大,为了避免存储空间不足的风险,从而减慢或崩溃您的服务器,您应该在创建备份之前检查数据库的大小。
您可以使用stats
方法和检查值dataSize
关键要知道你的字节数据库的大小。
db.stats().dataSize;
对于当前数据库,值dataSize
将是一个小数目:
592
注意,值dataSize
是仅在备份的尺寸的粗略估计。
第3步 - 创建备份
要创建一个备份,你可以使用一个名为命令行实用程序mongodump
。 默认情况下, mongodump
会创建所有存在于MongoDB实例数据库的备份。 要创建一个特定数据库的备份,则必须使用-d
选项,并指定该数据库的名称。 此外,为了让mongodump
知道在哪里存储备份,必须使用-o
选项并指定一个路径。
如果你还在里面mongo
外壳,按退出就CTRL+D
。
在下面的命令类型来创建MYDATABASE备份并将其存储在~/backups/first_backup
:
mongodump -d myDatabase -o ~/backups/first_backup
如果备份创建成功,您将看到以下日志消息:
2015-11-24T18:11:58.590-0500 writing myDatabase.myCollection to /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:11:58.591-0500 writing myDatabase.myCollection metadata to /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:11:58.592-0500 done dumping myDatabase.myCollection (3 documents)
2015-11-24T18:11:58.592-0500 writing myDatabase.system.indexes to /home/me/backups/first_backup/myDatabase/system.indexes.bson
请注意,备份不是单个文件; 它实际上是一个具有以下结构的目录:
first_backup
└── myDatabase
├── myCollection.bson
├── myCollection.metadata.json
└── system.indexes.bson
第4步 - 删除数据库
要测试您创建的备份,您可以使用在不同服务器上运行的MongoDB实例,也可以删除当前服务器上的数据库。 在本教程中,我们将使用后者。
打开mongo
外壳和连接到MYDATABASE。
mongo myDatabase
删除使用数据库dropDatabase
方法。
db.dropDatabase();
如果删除成功,您将看到以下消息:
{ "dropped" : "myDatabase", "ok" : 1 }
现在,您可以使用find
您的收藏方法来查看所有先前插入的数据已经一去不复返了。
db.myCollection.find();
此命令将没有输出,因为没有要在数据库中显示的数据。
第5步 - 恢复数据库
要恢复使用使用创建的备份数据库mongodump
,你可以使用另一种称为命令行实用程序mongorestore
。 在你使用它,退出mongo
按外壳CTRL+D
。
使用mongorestore
很简单。 它所需要的是包含备份的目录的路径。 下面是如何使用存储在备份还原数据库~/backupts/first_backup
:
mongorestore ~/backups/first_backup/
如果还原操作成功,您将看到以下日志消息:
2015-11-24T18:27:04.250-0500 building a list of dbs and collections to restore from /home/me/backups/first_backup/ dir
2015-11-24T18:27:04.251-0500 reading metadata file from /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:27:04.252-0500 restoring myDatabase.myCollection from file /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:27:04.309-0500 restoring indexes for collection myDatabase.myCollection from metadata
2015-11-24T18:27:04.310-0500 finished restoring myDatabase.myCollection (3 documents)
2015-11-24T18:27:04.310-0500 done
要检查恢复的数据,首先,打开mongo
外壳和连接到myDatabase
。
mongo myDatabase
然后,调用find
你的方法collection
。
db.myCollection.find();
如果一切顺利,您现在应该可以看到您之前插入的所有数据。
{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }
结论
在本教程中,你学习了如何使用mongodump
和mongorestore
备份和恢复MongoDB数据库。 请注意,创建备份是一项昂贵的操作,可能会降低MongoDB实例的性能。 因此,建议您仅在非高峰时间创建备份。
要了解更多关于MongoDB的备份策略,您可以参考MongoDB的3.0手动 。