前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上创建和使用MongoDB备份

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

原创
作者头像
藕丝空间
修改2018-09-26 09:55:42
9470
修改2018-09-26 09:55:42
举报

介绍

今天许多现代Web应用程序开发人员都选择在他们的项目中使用NoSQL数据库,而MongoDB通常是他们的首选。如果您在生产场景中使用MongoDB,则定期创建备份以避免数据丢失非常重要。幸运的是,MongoDB提供了简单的命令行工具来创建和使用备份。本教程将介绍如何使用这些工具。

要了解备份如何在不篡改现有数据库的情况下工作,本教程将首先引导您创建一个新数据库并向其中添加少量数据。然后,您将创建数据库的备份,然后删除数据库并使用备份还原它。

准备

要继续,您将需要:

  • 一个可以使用sudo权限的非root用户的64位Ubuntu 14.04 Droplet,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 将MongoDB 3.0.7安装在您的服务器上。

第1步 - 创建示例数据库

创建空数据库的备份不是很有用,因此在此步骤中,我们将创建一个示例数据库并向其中添加一些数据。

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

代码语言:javascript
复制
mongo

获得MongoDB提示后,使用帮助程序use创建一个名为myDatabase的新数据库。

代码语言:javascript
复制
use myDatabase
代码语言:javascript
复制
output
switched to db myDatabase

MongoDB数据库中的所有数据都应属于集合。但是,您不必显式创建集合。使用该insert方法写入不存在的集合时,将在写入数据之前自动创建集合。

您可以使用下面的代码,使用insert方法来将三个小文档添加到一个名为MyCollection的集合。

代码语言:javascript
复制
db.myCollection.insert([
    {'name': 'Alice', 'age': 30},
    {'name': 'Bill', 'age': 25},
    {'name': 'Bob', 'age': 35}
]);

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

代码语言:javascript
复制
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 3,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

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

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

您可以使用stats方法并检查dataSize密钥的值以了解数据库的大小(以字节为单位)。

代码语言:javascript
复制
db.stats().dataSize;

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

代码语言:javascript
复制
output
592

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

第3步 - 创建备份

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

如果您仍在mongoshell中,请按下CTRL+D退出。

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

代码语言:javascript
复制
mongodump -d myDatabase -o ~/backups/first_backup

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
first_backup
└── myDatabase
    ├── myCollection.bson
    ├── myCollection.metadata.json
    └── system.indexes.bson

第4步 - 删除数据库

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

打开mongoshell并连接到myDatabase

代码语言:javascript
复制
mongo myDatabase

使用dropDatabase`方法删除数据库。

代码语言:javascript
复制
db.dropDatabase();

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

代码语言:javascript
复制
{ "dropped" : "myDatabase", "ok" : 1 }

您现在可以使用集合的方法find来查看先前插入的所有数据是否都已消失。

代码语言:javascript
复制
db.myCollection.find(); 

此命令没有输出,因为数据库中没有要显示的数据。

第5步 - 恢复数据库

要使用使用mongodump创建的备份还原数据库,可以使用另一个名为mongorestore的命令行实用程序。在使用它之前,按下CTRL+D退出mongo shell 。

使用mongorestore非常简单。它所需要的只是包含备份的目录的路径。以下是使用存储在~/backupts/first_backup位置的备份恢复数据库的方法:

代码语言:javascript
复制
mongorestore ~/backups/first_backup/

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

代码语言:javascript
复制
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

要检查还原的数据,首先打开mongoshell并连接到myDatabase

代码语言:javascript
复制
mongo myDatabase

然后,在你的collection中调用find方法。

代码语言:javascript
复制
db.myCollection.find();

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

代码语言:javascript
复制
output
{ "_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备份的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How to Create and Use MongoDB Backups on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 创建示例数据库
  • 第2步 - 检查数据库的大小
  • 第3步 - 创建备份
  • 第4步 - 删除数据库
  • 第5步 - 恢复数据库
  • 结论
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档