介绍
许多现代Web应用程序开发人员今天选择在他们的项目中使用NoSQL数据库,MongoDB通常是他们的第一个选择。如果您在生产场景中使用MongoDB,重要的是您定期创建备份以避免数据丢失。
要了解备份如何工作而不会篡改您的现有数据库,本教程将从创建新数据库并添加少量的数据开始,然后您将创建数据库的备份,然后删除数据库并使用备份恢复它。
前提条件
要跟上,你需要:
- 一个 64 位 Ubuntu 14.04 Droplet 与 sudo 非根用户 * MongoDB 3.0.7 安装在您的服务器上,您可以通过遵循 这个 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 }
结论
在本教程中,您了解如何使用mongodump
和mongorestore
来备份和恢复MongoDB数据库. 请注意,创建备份是一种昂贵的操作,可以降低MongoDB实例的性能。
有关 MongoDB 备份策略的更多信息,请参阅 MongoDB 3.0 手册。