Docs 主页 → 开发应用程序 → MongoDB Manual
使用 MongoDB 工具进行备份和恢复
本教程介绍使用 MongoDB 提供的命令行实用程序 mongorestore
和mongodump
创建备份和恢复数据的过程。
要将自托管部署的备份恢复到托管MongoDB Atlas 部署,请参阅使用 mongorestore 播种。
对于完全托管的备份方法,请使用 MongoDB Atlas 中的云备份,它使用集群云服务提供商的原生快照功能提供本地化备份存储。
考虑因素
部署
mongorestore
和mongodump
实用程序可处理BSON数据转储,对于创建小型部署的备份非常有用。要实现弹性且无中断的备份,请将文件系统快照或区块级磁盘快照与 MongoDB Atlas 的云备份结合使用。
注意
使用 MongoDB Atlas 备份分片集群
要使用mongodump
和mongorestore
作为分片集群的备份策略,您必须停止分 片集群负载均衡器 ,并使用fsync
命令或 上的db.fsyncLock()
mongos
方法以阻止在备份期间对集群进行写入。
分片集群还可以使用以下协调备份和恢复流程之一,以确保跨分片事务的原子性:
性能影响
由于mongodump
和mongorestore
是通过与正在运行的mongod
实例交互来进行操作的,因此它们可能会影响正在运行的数据库的性能。这些工具不仅会为正在运行的数据库实例创建流量,还会强制数据库通过内存读取所有数据。当 MongoDB 读取不常使用的数据时,它可能会逐出更频繁访问的数据,从而导致数据库常规工作负载的性能下降。
使用 MongoDB 的工具备份数据时,请参考以下指南:
为文件添加标签,以便您能够识别备份的内容以及备份对应的时间点。
如果
mongodump
和 的性能影响对于您的使用案例来说是不可接受的,请使用替代备份策略,例如 文件系统快照 或mongorestore
MongoDB Atlas 中的云备份 。试着将备份恢复到一个 MongoDB 的测试部署中来确保您的备份可用。
提示
另请参阅:
MongoDB 备份方法和MongoDB Atlas 云备份,了解有关备份 MongoDB 实例的更多信息。此外,请参阅以下 MongoDB 数据库工具的参考文档:
输出格式
mongorestore
和mongodump
可以将数据输出到存档文件,这是多个 BSON 文件的单文件替代方案。存档文件是支持非连续文件写入的特殊用途格式。它们支持从 MongoDB 进行并发备份,以及恢复到 MongoDB。使用存档文件可优化执行备份和恢复操作时的磁盘 I/O。
您还可以将存档文件输出到标准输出 (stdout
)。通过写入到标准输出,可以通过网络迁移数据,减少磁盘 I/O 负载,并提高 MongoDB 工具和存储引擎中的并发性。
有关存档文件的更多信息,请参阅--archive
选项。
步骤
备份数据库 mongodump
注意
使用 MongoDB Atlas 备份分片集群
要使用mongodump
和mongorestore
作为分片集群的备份策略,您必须停止分 片集群负载均衡器 ,并使用fsync
命令或 上的db.fsyncLock()
mongos
方法以阻止在备份期间对集群进行写入。
分片集群还可以使用以下协调备份和恢复流程之一,以确保跨分片事务的原子性:
排除local
数据库
mongodump
会在其输出中排除local
数据库的内容。
必需的访问权限
要对已启用 访问控制mongodump
的 MongoDBbackup
部署运行 ,您必须具有为每个要备份的数据库授予find
操作的特权。内置 角色提供执行任一和所有数据库备份所需的特权。
backup
角色为运行数据库分析时存在的 system.profile
集合提供了额外的备份特权。
基本mongodump
操作
mongodump
实用程序通过连接到正在运行的mongod
来备份数据。
该工具可以为整个服务器、数据库或集合创建备份,也可以结合查询来仅备份一个集合的某一部分。
当您不带任何参数运行mongodump
时,该命令会通过端口27017
连接到本地系统(例如localhost
)上的 MongoDB 实例,并在当前目录中创建名为dump/
的数据库备份。
要从在同一台计算机和默认端口 27017
上运行的 mongod
实例备份数据,请使用以下命令:
mongodump
要指定 MongoDB 实例的主机和端口,您可以:
使用 SRV 或标准连接字符串,在
--uri
字符串中指定主机名和端口:mongodump --uri="mongodb+srv://username:password@cluster0.example.mongodb.net" <additional_options> 在
--host
字符串中指定主机名和端口:mongodump --host="mongodb0.example.com:27017" <additional_options> 在
--host
和--port
中指定该主机名和端口:mongodump --host="mongodb0.example.com" --port=27017 <additional_options>
mongodump
将写入BSON文件,其中包含可通过侦听mongodb.example.net
主机的27017
端口的mongod
访问的数据副本。有关更多信息,请参阅从非本地mongod
实例创建备份。
要指定不同的输出目录,可以使用--out
or -o
选项:
mongodump --out=/opt/backup/mongodump-1
要限制数据库转储中包含的数据量,可以指定--db
和--collection
作为mongodump
的选项。例如:
mongodump --collection=myCollection --db=test
此操作会在当前工作目录的 dump/
子目录中的数据库 test
内创建名为 myCollection
的集合转储。
如果输出文件存在于备份数据文件夹中,则mongodump
会覆盖这些文件。在多次运行mongodump
命令之前,请确保不再需要输出文件夹(默认为dump/
文件夹)中的文件,或者重命名这些文件夹或文件。
使用 Oplogs 创建备份
带有 的 选项会收集--oplog
mongodump
oplog 条目,并允许您对实时数据库执行备份。如果您稍后从备份恢复数据库,数据库将与备份完成时的数据库相同。
使用--oplog
时, mongodump
会复制源数据库中的所有数据以及从备份过程开始到结束的所有oplog条目。此操作与mongorestore
--oplogReplay
结合使用,可让您恢复反映与mongodump
完成创建转储文件的时间相对应的特定时间点的备份。
从非本地mongod
实例创建备份
的--host
和--port
mongodump
选项允许您连接到远程主机并从远程主机进行备份。考虑以下示例:
mongodump \ --host=mongodb1.example.net \ --port=3017 \ --username=user \ --password="pass" \ --out=/opt/backup/mongodump-1
如上所述,您可以在任何mongodump
命令中指定用户名和密码凭证,以指定数据库身份验证。
恢复数据库 mongorestore
注意
使用 MongoDB Atlas 备份分片集群
要使用mongodump
和mongorestore
作为分片集群的备份策略,您必须停止分 片集群负载均衡器 ,并使用fsync
命令或 上的db.fsyncLock()
mongos
方法以阻止在备份期间对集群进行写入。
分片集群还可以使用以下协调备份和恢复流程之一,以确保跨分片事务的原子性:
访问控制
要将数据恢复到启用了 访问控制 的 MongoDB 部署,restore
如果 数据不包括system.profile
集合数据,并且您在没有 选项的情况下运行mongorestore
--oplogReplay
,则 角色提供从备份恢复数据所需的特权。
如果备份数据包含system.profile
集合数据或者您使用--oplogReplay
运行,则需要额外权限:
system.profile | 如果备份数据包括 内置角色 |
--oplogReplay | 要使用 运行,请创建一个在 仅授予必须使用 运行 |
基本mongorestore
操作
mongorestore
实用程序可恢复mongodump
创建的二进制备份。默认情况下, mongorestore
会在dump/
目录中查找数据库备份。
mongorestore
实用程序通过直接连接到正在运行的mongod
来恢复数据。
mongorestore
可以恢复整个数据库备份或部分的备份。
注意
3.6 版本中的新增功能:
所有 MongoDB 集合默认都有 UUID。MongoDB 恢复集合时,恢复的集合保留其原始 UUID。恢复不存在 UUID 的集合时,MongoDB 会为恢复的集合生成一个 UUID。
有关集合 UUID 的更多信息,请参阅集合。
要使用mongorestore
连接到活动的mongod
,请使用具有以下原型形式的命令:
mongorestore --uri <connection string> <path to the backup>
考虑以下示例:
mongorestore /opt/backup/mongodump-1
此处, mongorestore
将/opt/backup/mongodump-1
目录中的数据库备份导入到默认端口27017
上的本地主机接口上运行的mongod
实例中。
恢复时间点 Oplog 备份
如果使用--oplog
选项创建数据库转储以确保时间点快照,请使用 选项调用mongorestore
--oplogReplay
,如以下示例所示:
mongorestore --oplogReplay
您还可以考虑使用mongorestore --objcheck
选项在将对象插入数据库时检查对象的完整性,或者可以考虑使用mongorestore --drop
选项从数据库中删除每个集合,然后再从备份恢复。
将备份恢复到非本地mongod
实例
默认情况下, mongorestore
连接到在本地主机接口和默认端口 ( 27017
) 上运行的 MongoDB 实例。如果要恢复到不同的主机或端口,请使用--host
和--port
选项。
mongorestore --host=mongodb1.example.net --port=3017
如果恢复到强制执行访问控制的实例,请同时包括--username
和--authenticationDatabase
。省略--password
选项以使mongorestore
提示输入密码:
mongorestore \ --host=mongodb1.example.net \ --port=3017 \ --username=user \ --authenticationDatabase=admin \ /opt/backup/mongodump-1