使用 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备份方法。