OPTIONS
翻译或纠错本页面

使用数据库导出备份集群

概述

这篇文档描述了备份集群中所有组件的一个方法.这种方法使用 mongodump 创建 mongod 数据的导出记录.在系统的文件系统支持快照的情况下,另一种更为有效的方法是使用文件系统快照进行备份,参见 备份和恢复集群 获得更多信息.

参见 MongoDB备份方案备份和恢复集群 获得MonoDB备份与集群备份的完整信息.

预先准备

重要

如果需要精确的时间点的备份,需要在备份过程中停止集群的写入.否则,只能备份大致在时间点附近的数据.

要通过 mongodump 备份集群中所有的数据库,需要使用 backup 角色.:authrole:backup 拥有备份所有数据库的权限,同时没有任何其他权限,以符合 least privilege 的原则.

要备份一个数据库,需要在指定的数据库上有 read 权限.有一些角色提供了这个权限,比如 backup 角色.

要备份 system.profile 集合,需要在这个数据库的这个集合上有 read 权限.有一些角色提供了这个权限,比如 clusterAdmindbAdmin .

在 2.6 版更改.

要备份数据库的用户以及 ref:user-defined roles <user-defined-roles> ,需要对 admin 数据库有权限,MongoDB在 admin 数据库中存储了这些信息.

更确切地说,要想备份一个数据库的用户,必须在 admin 数据库的 admin.system.users 集合拥有 find action.:authrole:backupuserAdminAnyDatabase 角色都有这种权限.

要备份数据库上用户定义的角色,需要有 admin 数据库上 admin.system.roles 集合的 find 权限.:authrole:backupuserAdminAnyDatabase 角色都有这种权限.

注意事项

在这个过程中,你需要停止集群的均衡过程,并备份 config database, 之后使用文件系统快照工具备份每个分片的数据.如果需要精确的时间点的备份,需要在备份过程中停止集群的写入.否则,只能备份大致在时间点附近的数据.

使用每个分片的复制集中一个从节点进行近似在某个时间点附近的备份,可以在备份时对集群的性能影响最小.

过程

1

禁用均衡过程

关闭在 分片 间均衡数据的 balancer 过程.在 mongo 终端中使用 sh.stopBalancer() 进行终止.举例:

use config
sh.setBalancerState(false)

参见 禁用均衡器 以获得更多信息.

在备份时将均衡过程关掉是至关重要的.如果备份时均衡过程在运行,由于 数据块 可能会迁移,最后备份的数据中就可能有重复的数据或者遗漏的数据.

2

锁住复制集成员

锁住每个分片的一个从节点,以在尽可能近似的时间点对集群进行备份.尽可能减少锁住 mongod 的时间.

为了锁住集群,需要关闭每个复制集中一个成员.要确保 oplog 足够容纳在备份数据期间的数据写入.参见 Oplog大小 获取更多信息.

3

备份一个配置服务器

备份一个 配置服务器 以备份集群的元信息.由于所有配置服务器存储的数据完全一样,所以只需要备份一台的数据即可.

使用 mongodump 备份配置服务器.可以通过任意一个配置服务器的 mongod 或通过 mongos 使用 mongodump .

为了获得一致的备份结果,你的配置服务器需要运行2.4以上的MongoDB,并在启动时需要使用 --configsvr 参数,备份时 mongodump 需要增加 --oplog .

mongodump --oplog --db config
4

备份复制集成员

使用 mongodump 并指定 --dbpath 参数在关闭MongoDB服务的节点上备份数据,不同分片之间备份可以同时进行,注意以下几点:

mongodump --journal --dbpath /data/db/ --out /data/backup/

你必须在与要备份的 mongod 同一系统中运行 mongodump .备份会使用 dbPath /data/db/ 创建所有数据的备份.默认情况下备份数据会写入到 /data/backup/ 目录下.

5

重启复制集成员

重启复制集中所有停止的成员,并让他们正常地与主节点进行同步.

6

重新打开均衡过程.

使用 sh.setBalancerState() 重新打开均衡过程.

在使用 mongo 终端连接到 mongos 之后,按照顺序使用如下的命令:

use config
sh.setBalancerState(true)