今天许多现代Web应用程序开发人员都选择在他们的项目中使用NoSQL数据库,而MongoDB通常是他们的首选。如果您在生产场景中使用MongoDB,则定期创建备份以避免数据丢失非常重要。幸运的是,MongoDB提供了简单的命令行工具来创建和使用备份。本教程将介绍如何使用这些工具。
要了解备份如何在不篡改现有数据库的情况下工作,本教程将首先引导您创建一个新数据库并向其中添加少量数据。然后,您将创建数据库的备份,然后删除数据库并使用备份还原它。
要继续,您将需要:
创建空数据库的备份不是很有用,因此在此步骤中,我们将创建一个示例数据库并向其中添加一些数据。
与MongoDB实例交互的最简单方法是使用mongo
shell。使用mongo
命令打开它。
mongo
获得MongoDB提示后,使用帮助程序use
创建一个名为myDatabase的新数据库。
use myDatabase
output
switched to db myDatabase
MongoDB数据库中的所有数据都应属于集合。但是,您不必显式创建集合。使用该insert
方法写入不存在的集合时,将在写入数据之前自动创建集合。
您可以使用下面的代码,使用insert
方法来将三个小文档添加到一个名为MyCollection的集合。
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" : [ ]
})
现在您有一个包含数据的数据库,您可以为其创建备份。但是,如果您拥有大型数据库,备份将会很大,并且为了避免存储空间不足的风险,从而减慢或崩溃服务器,您应该在创建备份之前检查数据库的大小。
您可以使用stats
方法并检查dataSize
密钥的值以了解数据库的大小(以字节为单位)。
db.stats().dataSize;
对于当前数据库,dataSize
的值将是一个小数字:
output
592
请注意,dataSize
的值只是对备份大小的粗略估计。
要创建备份,可以使用名为mongodump
的命令行实用程序。默认情况下,mongodump
将创建MongoDB实例中存在的所有数据库的备份。要创建特定数据库的备份,必须使用该-d
选项并指定数据库的名称。此外,要让mongodump
了解存储备份的位置,必须使用该-o
选项并指定路径。
如果您仍在mongo
shell中,请按下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
要测试您创建的备份,您可以使用在不同服务器上运行的MongoDB实例,也可以删除当前服务器上的数据库。在本教程中,我们将执行后者。
打开mongo
shell并连接到myDatabase。
mongo myDatabase
使用dropDatabase`方法删除数据库。
db.dropDatabase();
如果删除成功,您将看到以下消息:
{ "dropped" : "myDatabase", "ok" : 1 }
您现在可以使用集合的方法find
来查看先前插入的所有数据是否都已消失。
db.myCollection.find();
此命令没有输出,因为数据库中没有要显示的数据。
要使用使用mongodump
创建的备份还原数据库,可以使用另一个名为mongorestore
的命令行实用程序。在使用它之前,按下CTRL+D
退出mongo
shell 。
使用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
shell并连接到myDatabase
。
mongo myDatabase
然后,在你的collection
中调用find
方法。
db.myCollection.find();
如果一切顺利,您现在应该能够看到之前插入的所有数据。
output
{ "_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备份的相关教程,请前往腾讯云+社区学习更多知识。
参考文献:《How to Create and Use MongoDB Backups on Ubuntu 14.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。