介绍
MongoDB 是最受欢迎的 NoSQL 数据库引擎之一. 它以可扩展、强大、可靠和易于使用而闻名。 在本文中,我们将向您展示如何备份、恢复和迁移您的 MongoDB 数据库。
导入和导出数据库意味着处理与其他软件产品兼容的人读格式的数据,相反,备份和恢复操作创建或使用MongoDB特定的二进制数据,这不仅保留了数据的一致性和完整性,还保留了其特定的MongoDB属性。
前提条件
在遵循本教程之前,请确保您完成以下先决条件:
- Ubuntu 14.04 滴滴
- 非根苏多用户。 请检查access-date=中的日期值 (帮助) [Initial Server setup with Ubuntu 14.04] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)了解详情.
- 蒙戈语 DB 使用文章[如何在 Ubuntu 14.04 (https://andsky.com/tech/tutorials/how-to-install-mongodb-on-ubuntu-14-04) 上安装和配置了 MongoDB 。
- 莫戈实例 使用 [如何导入和导出 Ubuntu 14.04 上的 MongoDB 数据库的指令导入 DB 数据库(https://andsky.com/tech/tutorials/how-to-import-and-export-a-mongodb-database-on-ubuntu-14-04)
除非另有说明,本教程中需要 root 特权的所有命令都应该作为具有 sudo 特权的非 root 用户运行。
了解基本
如果你有经验使用流行的关系数据库系统,如MySQL,你可能在使用MongoDB时会发现一些相似之处。
您应该知道的第一件事是,MongoDB 使用 json 和 bson (二进制 json) 格式来存储其信息. Json 是可人读的格式,非常适合导出并最终导入您的数据。
一个 json 文档的例子看起来像这样:
1[label Example of json Format]
2{"address":[
3 {"building":"1007", "street":"Park Ave"},
4 {"building":"1008", "street":"New Ave"},
5]}
Json 非常方便,但它不支持 bson 中的所有数据类型,这意味着如果您使用 json,将出现所谓的信息忠诚度损失
。
其次,你不必担心明示地创建MongoDB数据库。如果你指定导入的数据库已经不存在,它会自动创建。更糟糕的是集合(数据库表)的结构。 与其他数据库引擎不同,在MongoDB中,结构在第一个文档(数据库行)插入时再次自动创建。
第三,在MongoDB中读取或插入大量数据,例如对于本文中的任务,可以耗费大量资源,并消耗大量的CPU、内存和磁盘空间。
第四,如果您有一个繁忙的 MongoDB 服务器,信息在数据库导出或备份过程中发生变化,信息的一致性可能会有问题。
虽然您可以使用 导入和导出功能来备份和恢复您的数据,但有更好的方法来确保您的 MongoDB 数据库的完整性。 为了备份您的数据,您应该使用命令 mongodump
。 为了恢复,使用 mongorestore
。 让我们看看它们是如何工作的。
备份 MongoDB 数据库
让我们先覆盖您的 MongoDB 数据库备份。
mongodump'的一个重要论点是
-db',它具体规定了你想备份的数据库的名称。 如果不指定数据库名称,). 首先,让我们创建该目录/var/后援/后援
和命令:
1sudo mkdir /var/backups/mongobackups
然后我们的备份命令应该是这样的:
1sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`
成功执行的备份将具有如下类型的输出:
1[label Output of mongodump]
22016-01-20T10:11:57.685-0500 writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
32016-01-20T10:11:57.907-0500 writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
42016-01-20T10:11:57.911-0500 done dumping newdb.restaurants (25359 documents)
52016-01-20T10:11:57.911-0500 writing newdb.system.indexes to /var/backups/mongobackups/01-20-16/newdb/system.indexes.bson
请注意,在上面的目录路径中,我们使用了date +
%m-%d-%y,它会自动获得当前日期,这将使我们能够在目录中拥有备份
/var/backups/01-20-16/`。
此时,您在目录中拥有完整的newdb
数据库备份 /var/backups/mongobackups/01-20-16/newdb/
. 此备份具有恢复newdb
的所有功能,并保持其所谓的忠诚度
。
一般来说,您应该定期进行备份,例如每天,最好是在服务器负载最少的时间。因此,您可以将mongodump
命令设置为 cron 任务,以便它定期运行,例如每天上午 03:03 完成此开放 crontab,Cron 的编辑器可以这样做:
1sudo crontab -e
请注意,当您运行sudo crontab
时,您将为 root 用户编辑 cron 工作,这是建议的,因为如果您为您的用户设置 crons,它们可能不会正确执行,特别是如果您的 sudo 配置文件需要密码验证。
在 crontab 提示中插入以下mongodump
命令:
1[label Crontab window]
23 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
在上述命令中,我们将--db
参数故意省略,因为您通常希望所有的数据库都备份。
根据您的 MongoDB 数据库大小,您可能很快就会失去磁盘空间,备份太多了,这就是为什么建议定期清理旧备份或压缩它们的原因。
1find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;
与之前的mongodump
命令类似,这个命令也可以作为 cron 任务添加,它应该在您开始下一个备份之前运行,例如在 03:01 早上。
1sudo crontab -e
然后插入以下行:
1[label Crontab window]
23 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;
完成此步骤中的所有任务将为您的 MongoDB 数据库提供良好的备份解决方案。
恢复和迁移MongoDB数据库
通过从以前的备份中恢复您的 MongoDB 数据库(如上一步中的备份),您将能够在一定时间内获得 MongoDB 信息的精确副本,包括所有索引和数据类型,这在您想要迁移 MongoDB 数据库时尤其有用。
让我们用newdb'数据库继续我们的例子,看看我们如何从先前的备份中恢复它。 作为论据,我们将首先用
-db ' 参数具体说明数据库的名称。 然后用 " -- -- 投放 " 来保证目标数据库首先被投放,以便备份在干净的数据库中恢复。 作为最后的论点,我们将具体说明最后备份的目录`/var/backups/mongobackups/01-20-16/newdb/'。 因此,整个命令将看起来像这样(替换您想要恢复的备份日期):
1sudo mongorestore --db newdb --drop /var/backups/mongobackups/01-20-16/newdb/
成功執行會顯示下列結果:
1[label Output of mongorestore]
22016-01-20T10:44:47.876-0500 building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir
32016-01-20T10:44:47.908-0500 reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
42016-01-20T10:44:47.909-0500 restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
52016-01-20T10:44:48.591-0500 restoring indexes for collection newdb.restaurants from metadata
62016-01-20T10:44:48.592-0500 finished restoring newdb.restaurants (25359 documents)
72016-01-20T10:44:48.592-0500 done
如果您希望将数据迁移到另一个服务器并使用相同的技术,您只需将备份目录复制到另一个服务器,即 /var/backups/mongobackups/01-20-16/newdb/
。
结论
您可以继续阅读关于如何设置可扩展的MongoDB数据库(https://andsky.com/tech/tutorials/how-to-set-up-a-scalable-mongodb-database),其中解释了MongoDB复制。
复制不仅对可伸缩性有用,对当前话题也很重要. 复制允许您继续从一个 slave MongoDB 服务器中不间断地运行您的 MongoDB 服务, 同时您正在从失败中恢复主服务器 。 复制的一部分也是[操作日志 (oplog)] (https://docs.mongodb.org/manual/core/replica-set-oplog/),它记录了修改您数据的所有操作. 您可以使用此日志, 就像您会使用 MySQL 中的二进制日志一样, 在上次备份发生后恢复您的数据 。 记得备份通常在夜间进行,如果您决定在晚上恢复备份,您将丢失自上次备份以来的所有更新.