使用 mongodump 备份 MongoDB 数据库

发布于

有几种方法可以在MongoDB中备份数据库。备份数据库的一种快速方法是使用该工具。mongodump

mongodump从MongoDB数据库中读取数据并创建高保真BSON文件,该文件可用于恢复MongoDB数据库。mongorestore

使用 ,可以备份集合、数据库或所有数据库。mongodump

检查MongoDB数据库工具

mongodump是 MongoDB 数据库工具包的一部分。MongoDB数据库工具是一套用于使用MongoDB的命令行实用程序。

您可能安装了也可能没有安装MongoDB数据库工具。尝试在终端或命令提示符下运行以下命令进行检查:mongodump

mongodump --version

如果您没有它,您可以使用MongoDB网站上的安装说明将其安装到您的系统上。

在哪里运行命令?

您需要从系统的命令行(例如,新的终端或命令提示符窗口)运行命令。mongodump

不要从 shell 运行它们。mongo

备份所有数据库

要备份在默认端口 27017 上运行的本地实例中的所有数据库和集合,请使用不带任何参数的命令。mongodump

mongodump

运行上述代码会将所有数据库转储到名为 的文件夹中。dump/

请注意,它不包括 和 数据库。local``config

另请注意,仅捕获数据库中的文档。执行还原时,或必须在还原数据后重新生成索引。mongodump``mongorestore``mongod

以下是文件夹中文件的外观。dump/

tree dump

结果:

dump ├── PetHotel │   ├── employees.bson │   ├── employees.metadata.json │   ├── owners.bson │   ├── owners.metadata.json │   ├── pets.bson │   ├── pets.metadata.json │   ├── pettypes.metadata.json │   ├── players.bson │   ├── players.metadata.json │   ├── scores.bson │   ├── scores.metadata.json │   ├── students.bson │   └── students.metadata.json ├── admin │   ├── system.users.bson │   ├── system.users.metadata.json │   ├── system.version.bson │   └── system.version.metadata.json └── krankykranes ├── employees.bson ├── employees.metadata.json ├── products.bson └── products.metadata.json

这些文件显然特定于我的MongoDB安装,其中包含测试数据库。在我的例子中,3个数据库被转储:,和。PetHotel``admin``krankykranes

备份到特定位置

可以使用 或 指定放置转储数据库文件的位置。--out``-o

例:

mongodump --out=data/backups/

艺术

mongodump -o=data/backups/

在这种情况下,每个数据库文件夹都直接输出到文件夹中(即没有文件夹)。data/backups/``/dump/

备份特定数据库

可以使用该参数指定要备份的数据库。--db

mongodump --db=krankykranes

这会将数据库转储到默认文件夹。krankykranes``dump/

备份特定集合

可以使用 或 指定要备份的集合。--collection``-c

例:

mongodump --db=krankykranes --collection=products

艺术

mongodump --db=krankykranes -c=products

这会将集合转储到文件夹中。products``dump/krankykranes

排除集合

您还可以使用该参数指定要从备份中排除的特定集合(即不包括在备份中)。--excludeCollection

例:

mongodump --db=PetHotel --excludeCollection=employees

这将转储除集合之外的数据库中的所有集合。PetHotel``employees

若要排除多个集合,请对要排除的每个集合使用单独的参数。--excludeCollection

例:

mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students

这会从备份中排除 和集合。employees``students

还可以使用该参数排除具有给定前缀的集合。--excludeCollectionsWithPrefix

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

这将转储除以字母开头的集合之外的所有集合。p

以下集合不包括以 开头的所有集合。pet

mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

可以使用多个参数来排除具有多个前缀的集合。--excludeCollectionsWithPrefix

例:

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p  --excludeCollectionsWithPrefix=s

压缩输出

您可以使用该参数来压缩输出。--gzip

mongodump --gzip --db=krankykranes

这将压缩单个文件。

tree dump

结果:

dump
└── krankykranes
    ├── employees.bson.gz
    ├── employees.metadata.json.gz
    ├── products.bson.gz
    └── products.metadata.json.gz

我们可以看到所有文件都有扩展名。.gz

输出到存档文件或标准输出流时,该选项将压缩存档文件或数据输出到流中。--gzip

将视图转换为集合

可以使用该参数将只读视图导出为集合。--viewsAsCollections

mongodump --db=PetHotel --viewsAsCollections

将视图导出为集合时, 会生成包含视图中文档的 BSON 文件。如果使用还原生成的 BSON 文件,则视图将还原为集合。mongodump``mongorestore

如果不使用此参数,将导出每个视图的元数据。如果在操作中包含视图的元数据文件,则会重新创建视图。mongodump``mongorestore

“使用”还会省略所有标准集合。因此,当我运行上面的代码时,我的文件夹结构如下所示:--viewsAsCollections``dump/

tree dump

结果:

dump
└── PetHotel
    ├── pettypes.bson
    └── pettypes.metadata.json

在我的数据库中,我有一个名为 的视图。当我将其导出为视图时,仅导出元数据。但是当我将其转换为集合时,会创建一个文件,如果我将视图导出为视图,该文件将不存在。PetHotel``pettypes``pettypes.bson

以下是导出该视图而不将其转换为集合时发生的情况。

mongodump --db=PetHotel --collection=pettypes

然后运行树命令,获取文件夹结构。

tree dump

结果:

dump └── PetHotel └── pettypes.metadata.json

因此,我们可以看到仅转储了视图的元数据。

安静模式

您可以使用该参数来限制终端或命令提示符窗口中的输出。--quiet

mongodump --quiet

如果不使用它,您可能会看到备份的视图、集合等的大列表。

详细模式

另一方面,您可以使用 or 参数来_增加_终端或命令提示符窗口中的输出。--verbose``-v

mongodump --verbose

您可以通过多次重复表单来增加详细程度。-v

例:

mongodump -vvvv

在我的系统上运行它显着增加了冗长。

备份查询结果

可以使用 or 参数转储查询结果。--query``-q

例:

mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'

执行此操作时,请用单引号将查询括起来。您可以对字段使用双引号。

档案和标准输出

可以使用 or 参数将输出写入指定的存档文件,或者,如果未指定存档文件,则写入标准输出 () 流,以便可以通过管道传输到另一个进程。--archive``stdout

输出到存档文件的示例:

mongodump --archive=PetHotel.20201230.archive --db=PetHotel

在下一个示例中,我写入标准输出流,然后通过管道传输至 :mongorestore

mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'

这将导致一个名为“出现在数据库中”的新集合(并且该集合仅包含字段值为 ) 的文档。dogs``PetHotel``type``dog

存取控制

前面的示例是使用默认端口在本地计算机上完成的。这意味着我们能够在不指定 、、 等内容的情况下运行。mongodump``--host``--port``--username

下面是使用这些参数进行身份验证的示例:homer

mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30

我们也可以使用该参数,但我们没有。如果通过但未通过,系统将提示您输入密码。--password``--user``--password

有关蒙戈垃圾场的更多信息

该实用程序接受许多其他有用的参数,并且在将其用作备份和恢复策略的一部分时,还需要考虑各种因素。mongodump

有关更多信息,请参阅 MongoDB 网站上的 mongodump 文档。

其他选项

mongodump并且是用于备份和恢复小型MongoDB部署的简单有效的工具,但不适合捕获大型系统的备份。mongorestore

有关备份MongoDB数据库的其他方法,请参阅MongoDB网站上的MongoDB备份方法。