- Administration >
- Administration Tutorials >
- Backup and Recovery >
- 备份和恢复集群 >
- 使用数据库导出备份集群
使用数据库导出备份集群¶
概述¶
这篇文档描述了备份集群中所有组件的一个方法.这种方法使用 mongodump 创建 mongod 数据的导出记录.在系统的文件系统支持快照的情况下,另一种更为有效的方法是使用文件系统快照进行备份,参见 备份和恢复集群 获得更多信息.
参见 MongoDB备份方案 与 备份和恢复集群 获得MonoDB备份与集群备份的完整信息.
预先准备¶
重要
如果需要精确的时间点的备份,需要在备份过程中停止集群的写入.否则,只能备份大致在时间点附近的数据.
要通过 mongodump 备份集群中所有的数据库,需要使用 backup 角色.:authrole:backup 拥有备份所有数据库的权限,同时没有任何其他权限,以符合 least privilege 的原则.
要备份一个数据库,需要在指定的数据库上有 read 权限.有一些角色提供了这个权限,比如 backup 角色.
要备份 system.profile 集合,需要在这个数据库的这个集合上有 read 权限.有一些角色提供了这个权限,比如 clusterAdmin 和 dbAdmin .
在 2.6 版更改.
要备份数据库的用户以及 ref:user-defined roles <user-defined-roles> ,需要对 admin 数据库有权限,MongoDB在 admin 数据库中存储了这些信息.
更确切地说,要想备份一个数据库的用户,必须在 admin 数据库的 admin.system.users 集合拥有 find action.:authrole:backup 与 userAdminAnyDatabase 角色都有这种权限.
要备份数据库上用户定义的角色,需要有 admin 数据库上 admin.system.roles 集合的 find 权限.:authrole:backup 与 userAdminAnyDatabase 角色都有这种权限.
注意事项¶
在这个过程中,你需要停止集群的均衡过程,并备份 config database, 之后使用文件系统快照工具备份每个分片的数据.如果需要精确的时间点的备份,需要在备份过程中停止集群的写入.否则,只能备份大致在时间点附近的数据.
使用每个分片的复制集中一个从节点进行近似在某个时间点附近的备份,可以在备份时对集群的性能影响最小.