6.4. 恢复目录服务器
在某些情况下,管理员想要恢复目录服务器,例如在硬件故障后。本节描述了支持的恢复方法。
注意
目录服务器不支持恢复单个数据库。
目录服务器以
dirsrv
用户身份运行恢复操作。因此,包含备份的目录的权限必须允许此用户读取文件。
6.4.1. 使用命令行恢复所有数据库
目录服务器支持在实例正在运行或实例离线时恢复数据库:
- 如果实例正在运行,请使用以下方法之一:
- 使用 dsconf backup restore 命令。请参阅 第 6.4.1.1.1 节 “使用 dsconf 备份恢复命令恢复 所有数据库”。
- 创建 cn=tasks 条目。请参阅 第 6.4.1.1.2 节 “使用 cn=tasks 条目恢复所有数据库”。
- 如果实例离线,请使用 dsctl bak2db 命令。请参阅 第 6.4.1.2 节 “恢复服务器的所有数据库为 Offline”。
6.4.1.1. 恢复服务器正在运行的所有数据库
6.4.1.1.1. 使用 dsconf 备份恢复命令恢复 所有数据库
使用 dsconf backup restore 命令自动创建从备份目录中恢复所有数据库的任务。
例如,要恢复存储在
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
目录中的备份:
dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
The backup restore task has finished successfully
6.4.1.1.2. 使用 cn=tasks 条目恢复所有数据库
Directory 服务器配置中的 cn=tasks,cn=config 条目是服务器用来管理任务的临时条目的容器条目。要启动恢复操作,请在 cn=restore,cn=tasks,cn=config 条目中创建任务。
警告
使用恢复任务会覆盖实例中的所有数据。
恢复任务条目需要以下属性:
cn
:设置任务的唯一名称。nsArchiveDir
:设置包含备份的目录的路径。nsDatabaseType
:设置要恢复的数据库类型。目录服务器仅支持此属性中的 ldbm 数据库 值。
例如,添加一个任务来从存储在
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
目录中的备份中恢复所有数据库:
ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: cn=example_restore,cn=import,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example_restore
nsArchiveDir: /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
nsDatabaseType: ldbm database
任务完成后,该条目将从目录配置中删除。
6.4.1.2. 恢复服务器的所有数据库为 Offline
如果在恢复数据库时服务器离线,请使用 dsctl bak2db 命令:
- 停止实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name stop
# dsctl instance_name stop
- 恢复数据库。例如,添加一个任务来从存储在
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
目录中的备份中恢复所有数据库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
# dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ bak2db successful
注意dsctl bak2db 命令以dirsrv
用户身份运行。因此,源目录的权限必须允许此用户读取文件和目录。 - 启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name start
# dsctl instance_name start
6.4.2. 使用 Web 控制台恢复所有数据库
使用 Web 控制台恢复所有数据库:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 单击 Manage Backups。按钮,然后选择显示的窗口列出了
/var/lib/dirsrv/slapd-instance_name/bak/
目录中的可用备份。 - 打开您要恢复的备份旁边的 Actions 菜单,然后选择 。
- 单击以确认。
6.4.3. 恢复包含复制条目的数据库
恢复供应商服务器时可能会出现一些情况:
- 消费者服务器也会恢复。对于不太可能的情况,所有数据库都会从备份中恢复(因此数据保持同步),用户仍然与供应商同步,因此不需要做其他操作。复制可在不中断的情况下恢复。
- 仅恢复供应商。如果只恢复供应商,或者消费者从不同时间进行的备份中恢复,请重新初始化供应商的用户以更新数据库中的数据。如果只恢复供应商,或者消费者从不同时间进行的备份中恢复,请重新初始化供应商的用户以更新数据库中的数据。
- 在供应商服务器上,changelog 条目还没有过期。如果自进行数据库备份以来供应商的 changelog 尚未过期,则恢复本地消费者并继续正常操作。只有在 cn=changelog5,cn=config 条目中的最大更改期限属性
nsslapd-changelogmaxage
设定的值短时,才会发生这种情况。有关这个选项的更多信息,请参阅 红帽目录服务器配置、命令和文件参考。目录服务器自动检测副本及其更改日志之间的兼容性。如果检测到不匹配,服务器会删除旧的 changelog 文件,并创建一个新的空 changelog 文件。 - 由于本地备份的时间,changelog 条目已在供应商服务器上过期。如果 changelog 条目已过期,请重新初始化消费者。有关重新初始化消费者的详情,请参考 第 15.8.3 节 “初始化消费者”。
例 6.3. 恢复目录服务器复制拓扑
例如,要恢复复制环境中所有服务器,由两个供应商和两个消费者服务器组成:
- 恢复第一个供应商。使用 dsconf backend import 命令导入数据。请参阅 第 6.1.2 节 “使用命令行导入”。
- 使用复制在线重新初始化剩余的服务器:
- 从第一个供应商初始化第二个供应商。
- 初始化来自供应商的用户。
详情请查看 第 15.8.3 节 “初始化消费者”。 - 在每个服务器上,显示复制状态以验证复制是否正常工作。详情请查看 第 15.22 节 “显示特定复制协议的状态”。
在恢复操作过程中,与恢复数据库关联的更改日志会被清除。消息将记录到供应商服务器的日志文件,表示需要重新初始化。
有关管理复制的详情,请参考 第 15 章 管理复制。