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

介绍

很多现代Web应用程序开发人员今天选择在他们的项目中使用NoSQL数据库,而MongoDB往往是他们的首选。 如果您在生产场景中使用MongoDB,请务必定期创建备份,以避免数据丢失。 幸运的是,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}
]);

如果插入成功,您会看到如下所示的消息:

输出成功的insert()操作
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 3,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

第2步 - 检查数据库的大小

现在,您有一个包含数据的数据库,您可以为它创建一个备份。 但是,如果您有大型数据库,备份将很大,为了避免存储空间不足的风险,从而减慢或崩溃您的服务器,您应该在创建备份之前检查数据库的大小。

您可以使用stats方法和检查值dataSize关键要知道你的字节数据库的大小。

db.stats().dataSize;

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

db.stats()。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

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

MongoDB备份的目录结构
first_backup
└── myDatabase
    ├── myCollection.bson
    ├── myCollection.metadata.json
    └── system.indexes.bson

第4步 - 删除数据库

要测试您创建的备份,您可以使用在不同服务器上运行的MongoDB实例,也可以删除当前服务器上的数据库。 在本教程中,我们将使用后者。

打开mongo外壳和连接到MYDATABASE。

mongo myDatabase

删除使用数据库dropDatabase方法。

db.dropDatabase();

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

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();

如果一切顺利,您现在应该可以看到您之前插入的所有数据。

find()的输出
{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }

结论

在本教程中,你学习了如何使用mongodumpmongorestore备份和恢复MongoDB数据库。 请注意,创建备份是一项昂贵的操作,可能会降低MongoDB实例的性能。 因此,建议您仅在非高峰时间创建备份。

要了解更多关于MongoDB的备份策略,您可以参考MongoDB的3.0手动

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏