备份和恢复红帽目录服务器
备份和恢复红帽目录服务器
摘要
提供有关红帽目录服务器的反馈
我们感谢您对我们文档和产品的输入信息。请让我们了解如何改进文档。要做到这一点:
第 1 章 备份目录服务器
目录服务器中的备份包含以下文件:
-
包含数据库索引属性的 LDIF 文件
dse_index.ldif
-
包含实例配置属性的 LDIF 文件
dse_instance.ldif
-
每个后端的一个目录,如
userRoot
,其中包含数据库中定义的索引的.db
文件 -
事务日志文件
log memcached
-
数据库版本文件
DBVERSION
请注意,目录服务器不支持备份单个数据库。
有关备份其他重要文件(如配置)的详情,请参阅 备份配置文件、证书数据库和自定义模式文件。
与备份不同,您可以导出数据,如从 Directory Server 导出数据 中所述。使用导出功能,以 LDIF 格式从服务器导出特定数据,如子树。
1.1. 在实例运行时使用命令行备份所有数据库
要备份正在运行的 Directory 服务器实例的所有数据库,请使用 dsconf backup create
命令。
当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。
先决条件
dirsrv
用户在目标目录中具有写入权限。请注意,目录服务器默认使用自己的私有目录。因此,除非您禁用了 PrivateTmp systemd 指令,否则在
/var/tmp/
、/tmp/
和/root/
目录下备份和导出会失败。- 目录服务器实例正在运行。
流程
备份所有数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" ldap://server.example.com backup create
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup create The backup create task has finished successfully
默认情况下,
dsconf
将备份存储在名为instance_name-YYYY_MM_DD_hh_mm_ss
的子目录中,保存在/var/lib/dirsrv/slapd- instance_name /bak/
目录中的名为instance_name-YYYY_MM_DD_hh_mm_ss 的子目录中。要指定不同的位置,请在命令中附加一个目录名称。-
在备份过程中搜索
/var/log/dirsrv/slapd-instance_name/errors
日志。
其他资源
-
要显示可以用来备份数据的所有附加设置,请查看
dsconf ldap://server.example.com backup create --help
命令的输出。 - 备份配置文件、证书数据库和自定义架构文件
- 在实例运行时使用命令行恢复所有数据库
- 从 Directory 服务器导出数据
1.2. 在实例离线期间使用命令行备份所有数据库
要在 Directory 服务器实例离线时备份数据库,请使用 dsctl db2bak
命令。
先决条件
dirsrv
用户在目标目录中具有写入权限。请注意,目录服务器默认使用自己的私有目录。因此,除非您禁用了 PrivateTmp systemd 指令,否则在
/var/tmp/
、/tmp/
和/root/
目录下备份和导出会失败。- 目录服务器实例没有运行。
流程
备份所有数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name db2bak
# dsctl instance_name db2bak db2bak successful
默认情况下,
dsctl db2bak
将备份存储在/var/lib/dirsrv/slapd-instance_name/bak/ 目录中的
子目录中。要指定不同的位置,请在命令中附加一个目录名称。instance_name-YYYY_MM_DD_hh_mm_ss
(可选)将
-v
选项传给命令以显示详细输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl -v instance_name db2bak
# dsctl -v instance_name db2bak ... DEBUG: Instance allocated DEBUG: systemd status -> True ... INFO: db2bak successful
-
在备份过程中搜索
/var/log/dirsrv/slapd-instance_name/errors
日志。 可选:启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name start
# dsctl instance_name start
1.3. 使用 Web 控制台备份所有数据库
目录服务器支持使用 Web 控制台进行数据备份。
当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。
先决条件
dirsrv
用户在目标目录中具有写入权限。请注意,目录服务器默认使用自己的私有目录。因此,除非您禁用了 PrivateTmp systemd 指令,否则备份和导出
/var/tmp/
、/tmp/
和/root/
目录会失败。- 在 web 控制台中登录到实例。
流程
-
单击
Manage Backups
。 按钮,然后选择 - 点 。
- 输入备份的名称,如时间戳,以指示备份的创建日期和时间。
- 点 。
- 要检查备份过程中的日志,请打开 → → 菜单。
服务器使用您在 /var/lib/dirsrv/slapd-instance_name/bak/
目录中输入的名称将备份存储在子目录中。
1.4. 备份配置文件、证书数据库和自定义架构文件
当实例在线或离线时备份数据库时,目录服务器还会备份配置文件、证书数据库和自定义模式文件。dsconf backup create
和 dsctl db2bak
命令将文件备份到 /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/
backup 默认目录中。您可能需要在硬件故障后恢复不同服务器上的实例。
在备份过程中,请勿更新证书数据库。否则,这个数据库在备份中可能不一致。
流程
- 在实例正在运行或离线时执行目录服务器 备份,如在运行实例期间使用命令行备份所有数据库 中所述,或者在实例 离线期间使用 命令行备份所有数据库。
验证
在备份目录中查找备份的配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/
# ls /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/
注意目录服务器不会自动恢复备份的配置文件。您需要手动恢复这些文件。
其他资源
第 2 章 启用组成员来备份目录服务器,并将备份作为组成员之一执行
您可以配置组成员具有备份实例并执行备份的权限。这会提高安全性,因为您不再需要在备份脚本或 cron 任务中设置 cn=Directory Manager
的凭证。另外,您可以通过修改组来轻松授予和撤销备份权限。
2.1. 启用一个组来备份 Directory 服务器
使用这个流程添加 cn=backup_users,ou=groups,dc=example,dc=com
组,并启用此组的成员来创建备份任务。
前提条件
-
数据库中存在
ou=groups,dc=example,dc=com
条目。
流程
创建
cn=backup_users,ou=groups,dc=example,dc=com
组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
# dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
添加一个访问控制指令(ACI),允许
cn=backup_users,ou=groups,dc=example,dc=com
组的成员创建备份任务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com dn: cn=config changetype: modify add: aci aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*") (version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) - add: aci aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass") (version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
创建用户:
创建用户帐户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
# dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
在用户帐户中设置密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
# dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
将
uid=example,ou=People,dc=example,dc=com
用户添加到cn=backup_users,ou=groups,dc=example,dc=com
组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group add_member backup_users uid=example,ou=People,dc=example,dc=com
# dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group add_member backup_users uid=example,ou=People,dc=example,dc=com
验证
显示
cn=config
条目中设置的 ACI:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapsearch -o ldif-wrap=no -LLLx -D "cn=directory manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base
# ldapsearch -o ldif-wrap=no -LLLx -D "cn=directory manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base dn: cn=config aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass")(version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) ...
2.2. 以普通用户身份执行备份
您可以以普通用户而不是 cn=Directory Manager
执行备份。
前提条件
-
启用了
cn=backup_users,ou=groups,dc=example,dc=com
组的成员来执行备份。 -
您用于执行备份的用户是
cn=backup_users,ou=groups,dc=example,dc=com
组的成员。
流程
使用以下方法之一创建备份任务:
使用
dsconf backup create
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backup create
# dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backup create
通过手动创建任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapadd -D "uid=example,ou=People,dc=example,dc=com" -W -H ldap://server.example.com
# ldapadd -D "uid=example,ou=People,dc=example,dc=com" -W -H ldap://server.example.com dn: cn=backup-2021_07_23_12:55_00,cn=backup,cn=tasks,cn=config changetype: add objectClass: extensibleObject nsarchivedir: /var/lib/dirsrv/slapd-instance_name/bak/backup-2021_07_23_12:55_00 nsdatabasetype: ldbm database cn: backup-2021_07_23_12:55_00
验证
验证备份是否已创建:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -l /var/lib/dirsrv/slapd-instance_name/bak/
# ls -l /var/lib/dirsrv/slapd-instance_name/bak/ total 0 drwx------. 3 dirsrv dirsrv 108 Jul 23 12:55 backup-2021_07_23_12_55_00 ...
第 3 章 恢复目录服务器
在某些情况下,例如在硬件故障后,您需要恢复目录服务器。您可以使用命令行或 Web 控制台进行此操作。请注意,目录服务器不支持恢复单个数据库。
当您要使用自定义数据填充数据库时,请使用导入功能。您可以以 LDIF 格式从服务器导入特定数据。详情请参阅 将数据导入到目录服务器。
3.1. 在实例运行时使用命令行恢复所有数据库
要恢复正在运行的 Directory Server 实例上的所有数据库,请使用 dsconf backup restore
命令。
先决条件
- 您有一个目录服务器备份。
-
dirsrv
用户在备份目录中具有读取权限。 - 目录服务器实例正在运行。
流程
从存储在
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss目录中的备份中恢复
所有数据库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss The backup restore task has finished successfully
-
在恢复过程中搜索
/var/log/dirsrv/slapd-instance_name/errors
日志的问题。
其他资源
-
要显示可用于恢复数据的所有附加设置,请查看
dsconf ldap://server.example.com backup restore --help
命令的输出。 - 在实例运行时使用命令行备份所有数据库
- 将数据导入到目录服务器
3.2. 在实例离线期间使用命令行恢复所有数据库
要在实例离线时恢复所有数据库,请使用 dsctl bak2db
命令。
先决条件
- 您有一个目录服务器备份。
-
dirsrv
用户在备份目录中具有读取权限。 - 目录服务器实例没有运行。
流程
从存储在
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss目录中的备份中恢复
所有数据库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/
# dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/ bak2db successful
(可选)将
-v
选项传给命令以显示详细输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl -v instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/
# dsctl -v instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/ ... DEBUG: Instance allocated DEBUG: OK group dirsrv exists DEBUG: OK user dirsrv exists DEBUG: systemd status -> True ... INFO: bak2db successful
-
在恢复过程中搜索
/var/log/dirsrv/slapd-instance_name/errors
日志的问题。 可选:启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name start
# dsctl instance_name start
3.3. 使用 Web 控制台恢复所有数据库
目录服务器支持使用 Web 控制台恢复数据。
先决条件
-
备份存储在
/var/lib/dirsrv/slapd-instance_name/bak/
目录中。 -
dirsrv
用户在备份目录中具有读取权限。 - 在 web 控制台中登录到实例。
流程
-
单击
Actions
菜单,然后选择Manage Backups
。显示的窗口列出了/var/lib/dirsrv/slapd-instance_name/bak/
目录中的可用备份。 -
打开您要恢复的备份旁边的
Actions
菜单,然后选择Restore Backup
。 - 单击 以确认。
- 要在恢复过程中检查日志是否有问题,请打开 → → 菜单。
3.4. 恢复包含复制条目的数据库
恢复供应商服务器时可能会出现几个情况:
消费者服务器也会恢复。
在不太可能的情况下,所有数据库都会同时从备份中恢复(因此数据同步),用户仍然与供应商同步,不需要执行任何其他操作。复制可在不中断的情况下恢复。
只恢复供应商。
如果只恢复供应商,或者消费者在不同时间从备份中恢复,请重新初始化供应商的用户来更新数据库中的数据。
changelog 条目尚未在供应商服务器上过期。
如果因为进行数据库备份以来供应商的 changelog 没有过期,则恢复本地消费者并继续正常操作。只有在备份在超过最大更改期限属性
nsslapd-changelogmaxage
( cn=changelog,cn=database_name
,cn=ldbm database,cn=plugins,cn=plugins,cn=plugins,cn=config 条目)设置的值时,才会发生此情况。目录服务器自动检测副本及其更改日志之间的兼容性。如果检测到不匹配,服务器会删除旧的 changelog 文件,并创建一个新的空更改文件。
自本地备份起,更改日志条目已在供应商服务器上过期。
如果 changelog 条目已过期,请重新初始化消费者。
例 3.1. 恢复目录服务器复制拓扑
要恢复复制环境中的所有服务器,由两个供应商和两个消费者服务器组成:
- 使用 restore 或 import 重新初始化第一个供应商。
使用复制在线初始化剩余的服务器:
- 从第一个供应商初始化第二个供应商。
- 初始化来自供应商的消费者。
- 在每个服务器上,显示复制状态以验证复制是否正常工作。
在恢复操作过程中,与恢复的数据库关联的 changelog 将被删除。将消息记录到供应商服务器的日志文件,表示需要重新初始化。
3.5. 恢复配置文件、证书数据库和自定义架构文件
您可以从备份中手动恢复配置文件、证书数据库和自定义模式文件。
先决条件
- 您有一个目录服务器备份。
-
dirsrv
用户在/var/lib/dirsrv/slapd-instance_name/bak/
backup 目录中具有读取权限。 - 目录服务器实例没有运行。
流程
将您要从备份目录恢复的文件复制到目录服务器配置目录中。例如,要恢复
dse.ldif
配置文件,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/dse.ldif /etc/dirsrv/slapd-instance_name/
# cp /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/dse.ldif /etc/dirsrv/slapd-instance_name/
启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl instance_name start
# dsctl instance_name start
验证
验证服务器是否已恢复服务器配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" ldap://server.example.com config get
# dsconf -D "cn=Directory Manager" ldap://server.example.com config get
其他资源