创建数据库的 MongoDB 转储

Tahseen Tauseef 2023年1月30日 2022年5月13日
  1. MongoDB 中的 mongodump 命令
  2. 使用 mongodump 命令创建数据库的 MongoDB 转储
  3. 使用 mongodump 命令创建所有数据库的 MongoDB 转储
  4. 使用 mongorestore 命令恢复 Mongo 数据库
  5. 结论
创建数据库的 MongoDB 转储

在本 MongoDB 教程中,你将获得 MongodumpMongorestore 的演练,如何使用它们,以及使用这两种工具备份和恢复你的集合的一些简单示例。

MongoDB 中的 mongodump 命令

Mongodump 是一个从数据库内容创建二进制导出的工具。此工具支持 mongodmongos 实例。

用户可以使用 Mongodump 从独立、副本、集合和分片集群安装中导出数据。

Mongodump 曾经定期更新,每当 MongoDB 服务器升级时都会提供新版本。但是,该实用程序自 MongoDB 4.4 以来就已进行了版本控制。当前版本 100.2.1 支持 MongoDB 3.6、4.0、4.2 和 4.4。

即使支持所有以前版本的 MongoDB,Mongodump 也可能不完全兼容它们。该小工具充当备用计划。

如果 IT 专业人员想要计划备份(集合),这是他们每天备份和恢复数据库的一种方法。例如,Mongodump 可以将所有内容保存在一个文件中,并且以后可以使用 Mongorestore 来完全恢复数据库。

我们可以从系统命令行而不是 mongo shell 执行 mongodump 命令。mongodump 命令结构如下:

mongodump <options> <connection-string>

-uri 和正确结构化的字符串或标志选项,如 -user-db-password 可用于连接到 mongo 数据库。不幸的是,用户不能将两个不同的命令合并为一个。

使用 mongodump 命令创建数据库的 MongoDB 转储

mongodump 可以使用 localhost 使用以下命令转储名为 database1 的集合,使用 URI 格式和用户信息。

  1. 数据库名称:database1
  2. 用户名:user123
  3. 密码:mydatabse123
mongodump --uri="mongodb://uberuser:mydatabse123@localhost:27107/database1?ssl=false&authSource=admin"

使用标准标志的 mongodump 命令的另一个示例如下所示:

mongodump --user=uberuser --db=database1 --password=mydatabse123 --authenticationDatabase=admin

数据库备份也可以保存为存档文件。相比之下,将文件转储到目录中并不好。

这些选择用于切换服务器或跨主机传输数据。 -archive 选项允许用户提供存档的名称。

此选项生成一个文件,该文件可以使用 Mongorestore. 重新导入数据库。

如果数据库的名称与要转储的数据库相同,请使用正确名称的 -authenticationDatabase 标志。使用 URI 时,请确保 authSource 组件链接到正确的数据库。

典型的 mongodump 方法将整个数据库转储到单个转储目录中,默认情况下命名为 dump.。该目录将在我们运行命令的同一目录中创建。

数据库将以目录中的子文件夹命名。在前面的示例中,这将是 database1;因此,新结构将是 ./dump/database1.

相应文件夹中的数据库集合将有两个单独的文件——一个 BSON 和一个 JSON 文件。

.metadate.json 文件将遵循类似的结构,包含诸如 options, indexes,ns 之类的元数据以匹配集合的命名空间。BSON 文件中的 .bson 文件将保留集合的数据。

用户可以在 mongodump. 中自定义输出的特定行为。

可以在转储目录中使用诸如 -out 之类的标志来提供应转储数据库的目录名称。例如,转储目录可以称为 dumbbase.,而不是转储。

下面是命令的显示方式。

mongodump --user=user123 --db=database1 --password=mydatabse123 --authenticationDatabase=admin --out=dumbbase

默认情况下,所有集合都转储到输出文件夹中。文件夹的名称将被添加到数据库中。

用户可以通过一次仅备份一个集合来进一步限制实用程序的功能。用户可以使用 -collection 参数指定要转储的集合。

如果只转储行动人物集合,则示例 mongodump 命令将是:

mongodump --user=user123 --db=database1 --password=mydatabse123 --authenticationDatabase=admin --out=dumbbase --collection=action_figures

我们还可以使用命令创建以下文件夹结构:

.
 |_dumbbase
 |_database1
 |_action_figures.metadata.json
 |_action_figures.bson

可以根据用户需要多次使用该命令一次备份一个集合。这些说明不会覆盖输出文件夹的内容。

下面是将 older 集合添加到转储文件夹的示例。

Mongodump --user=user123 --db=database1 --password=mydatabse123 --authenticationDatabase=admin --out=action_figures --collection=older

database/database1 文件夹将使用附加的 older.metadata.jsonolder.bson 文件创建,其结构如下所示:

.
 |_action_figures
   |_database1
     |_action_figures.metadata.json
     |_action_figures.bson
     |_older.metadata.json
     |_older.bson

使用 mongodump 命令创建所有数据库的 MongoDB 转储

备份和归档所有文件也是可行的。

将所有内容清空到转储目录不是一个好主意。此选项最有助于在主机之间移动数据或在服务器之间传输备份文件。

它使用 -archive 开关允许用户命名存档文件。此选项生成一个文件,我们可以使用 mongorestore 重新导入数据库。

因此,用户不能同时使用 -archive-out 选项。

mongodump 命令将转储以下示例中的所有数据库(集合):

mongodump --db=database1 --username=uberuser --password=mydatabse123 --authenticationDatabase=admin --archive=database1.archive

使用 mongorestore 命令恢复 Mongo 数据库

mongorestore 程序与 mongodump 完全相反,允许用户恢复数据库。应用程序从二进制数据库转储或 Mongodump 工具中读取数据。

mongorestoremongoimport 不同,因为它只是插入数据。

应用程序无法替换数据库中的现有文档。它包含任何必要的升级。

如果文档的 id 已经存在,则不会替换该文档。否则,mongorestore 可以建立一个新的数据库或更新一个已经存在的数据库。

运行 mongorestore 的唯一条件是拥有转储目录的路径。可以使用以下 mongorestore 示例:

mongorestore dump/

如果将 localhost 指定为主机,并且数据库名称与转储目录中子文件夹的名称匹配,则将生成数据库。当使用远程主机时,命令更加复杂。

用户必须添加 -uri 标志或所有常规连接标志,例如:

--host
--db
--username
--port
--password

该应用程序也不需要恢复整个数据库。只能恢复单个集合或集合列表。

用户可以使用 -collection-db 选项并输入 BSON 文件的位置。在这种情况下,-collection 指的是数据库集合的名称:

mongorestore --db=newdb --collection=novels dump/mydb/product.bson

虽然这个命令是有效的,但它不是最优的。 -nsInclude 选项是恢复各种集合的首选方式。

此选项允许用户选择用于恢复 mongo 数据库集合的命名空间模式。

例如,如果转储目录删除了名为 databasedatabase2 的数据库,文件夹的最终结构可能如下所示:

.
 |_dump
   |_database
     |_product.metadata.json
     |_product.bson
     |_order.metadata.json
     |_order.bson
   |_db2
     |_product.metadata.json
     |_product.bson
     |_order.metadata.json
     |_order.bson

database 可能会被分离并导入以在本地环境中使用 -nsInclude. 恢复。命令如下:

mongorestore --db=database1 --nsInclude="database.*" dump/

从数据库 database1 溢出的 database 中的所有集合都将使用上面的命令恢复。但是,即使数据保存在同一个转储目录中,该操作也没有修复 database2 中的任何内容。

结论

正如本文中所讨论的,mongodump 是一个有用的工具,它允许你通过一些指令来备份集合。整个集合可能会被吐出到一个文件中,只需要一个命令。

该程序足够灵活,可以仅备份数据库的所需位,并且它有多种选择来更改你需要保存的数据。

已经开发了许多技术来简化管理数据库的任务。使用这些重要的工具和说明可以快速、干净地完成必须重复的复杂过程。

整个数据库或特定部分可以通过单个命令进行备份或恢复。mongodump 可以在处理 MongoDB 数据库(集合)时使用。

相关文章 - MongoDB Database