如何在 Ubuntu 14.04 上创建和使用 MongoDB 备份

介绍

许多现代Web应用程序开发人员今天选择在他们的项目中使用NoSQL数据库,MongoDB通常是他们的第一个选择。如果您在生产场景中使用MongoDB,重要的是您定期创建备份以避免数据丢失。

要了解备份如何工作而不会篡改您的现有数据库,本教程将从创建新数据库并添加少量的数据开始,然后您将创建数据库的备份,然后删除数据库并使用备份恢复它。

前提条件

要跟上,你需要:

步骤1 - 创建示例数据库

创建一个空数据库的备份不是非常有用的,所以在这个步骤中,我们将创建一个示例数据库并添加一些数据。

与 MongoDB 实例进行交互的最简单方法是使用mongo壳,用mongo命令打开它。

1mongo

一旦您有 MongoDB 提示,请使用使用辅助程序创建一个名为 myDatabase 的新数据库。

1use myDatabase
1[label Output]
2switched to db myDatabase

MongoDB 数据库中的所有数据都应该属于 collection. 但是,您不需要明确创建一个集合。

您可以使用以下代码将三个小文件添加到名为 myCollection 的集合中,使用插入方法:

1db.myCollection.insert([
2    {'name': 'Alice', 'age': 30},
3    {'name': 'Bill', 'age': 25},
4    {'name': 'Bob', 'age': 35}
5]);

如果插入成功,您将看到一个看起来像这样的消息:

 1[label Output of a successful insert() operation]
 2BulkWriteResult({
 3    "writeErrors" : [ ],
 4    "writeConcernErrors" : [ ],
 5    "nInserted" : 3,
 6    "nUpserted" : 0,
 7    "nMatched" : 0,
 8    "nModified" : 0,
 9    "nRemoved" : 0,
10    "upserted" : [ ]
11})

步骤 2 – 检查数据库的大小

但是,如果您有大数据库,备份将大,并且为了避免失去存储空间的风险,从而减慢或崩溃您的服务器,您应该在创建备份之前检查数据库的大小。

您可以使用状态方法检查dataSize密钥的值,以了解数据库的字节大小。

1db.stats().dataSize;

对于当前数据库,dataSize的值将是一个小数字:

1[label Output of db.stats().datasize]
2592

请注意,dataSize的值只是对备份大小的粗略估计。

第3步:创建备份

要创建备份,您可以使用命令行实用程序名为mongodump。默认情况下,mongodump会创建一个备份 MongoDB 实例中的所有数据库。要创建一个特定数据库的备份,您必须使用-d选项并指定数据库的名称。此外,要让mongodump知道存储备份的位置,您必须使用-o选项并指定路径。

如果您仍然在mongo壳中,请按CTRL+D来退出它。

输入以下命令以创建 myDatabase 的备份,并将其存储在 ~/backups/first_backup 中:

1mongodump -d myDatabase -o ~/backups/first_backup

如果备份创建成功,您将看到以下日志消息:

1[label Successful backup creation logs]
22015-11-24T18:11:58.590-0500 writing myDatabase.myCollection to /home/me/backups/first_backup/myDatabase/myCollection.bson
32015-11-24T18:11:58.591-0500 writing myDatabase.myCollection metadata to /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
42015-11-24T18:11:58.592-0500 done dumping myDatabase.myCollection (3 documents)
52015-11-24T18:11:58.592-0500 writing myDatabase.system.indexes to /home/me/backups/first_backup/myDatabase/system.indexes.bson

请注意,备份不是单个文件,它实际上是一个具有以下结构的目录:

1[label Directory structure of a MongoDB backup]
2first_backup
3└── myDatabase
4    ├── myCollection.bson
5    ├── myCollection.metadata.json
6    └── system.indexes.bson

第4步:删除数据库

要测试您创建的备份,您可以使用在不同的服务器上运行的 MongoDB 实例或删除当前服务器上的数据库。

打开mongo壳并连接到 myDatabase

1mongo myDatabase

使用dropDatabase方法删除数据库。

1db.dropDatabase();

如果删除成功,您将看到以下消息:

1[label Output of dropDatabase()]
2{ "dropped" : "myDatabase", "ok" : 1 }

现在,您可以使用收藏的查找方法,查看您之前输入的所有数据都没有了。

1db.myCollection.find();

从此命令中不会有输出,因为数据库中没有可显示的数据。

第5步:恢复数据库

若要使用mongodump创建的备份来恢复数据库,您可以使用另一个命令行实用程序,名为mongorestore

使用mongorestore非常简单. 所有它需要的是包含备份的目录路径. 以下是如何使用存储在~/backupts/first_backup中的备份来恢复您的数据库:

1mongorestore ~/backups/first_backup/

如果恢复操作成功,您将看到以下日志消息:

1[label Successful restore logs]
22015-11-24T18:27:04.250-0500 building a list of dbs and collections to restore from /home/me/backups/first_backup/ dir
32015-11-24T18:27:04.251-0500 reading metadata file from /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
42015-11-24T18:27:04.252-0500 restoring myDatabase.myCollection from file /home/me/backups/first_backup/myDatabase/myCollection.bson
52015-11-24T18:27:04.309-0500 restoring indexes for collection myDatabase.myCollection from metadata
62015-11-24T18:27:04.310-0500 finished restoring myDatabase.myCollection (3 documents)
72015-11-24T18:27:04.310-0500 done

要检查恢复的数据,首先打开mongo壳并连接到myDatabase

1mongo myDatabase

然后,在你的收藏上调用查找方法。

1db.myCollection.find();

如果一切顺利,您现在应该能够查看您之前输入的所有数据。

1[label Output of find()]
2{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
3{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
4{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }

结论

在本教程中,您了解如何使用mongodumpmongorestore来备份和恢复MongoDB数据库. 请注意,创建备份是一种昂贵的操作,可以降低MongoDB实例的性能。

有关 MongoDB 备份策略的更多信息,请参阅 MongoDB 3.0 手册

Published At
Categories with 技术
comments powered by Disqus