备份和恢复红帽目录服务器

Red Hat Directory Server 12

备份和恢复红帽目录服务器

Red Hat Customer Content Services

摘要

使用 Web 控制台或命令行备份红帽目录服务器数据库、配置文件和自定义模式文件。您还可以在实例离线或在线时恢复数据库。

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。要做到这一点:

  • 要通过 JIRA 提交反馈(需要帐户):

    1. 登录到 Jira 网站。
    2. 在顶部导航栏中点 Create
    3. Summary 字段中输入描述性标题。
    4. Description 字段中输入您对改进的建议。包括到文档相关部分的链接。
    5. 点对话框底部的 Create
  • 要通过 Bugzilla 提交反馈(需要帐户):

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 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/ 目录下备份和导出会失败。

  • 目录服务器实例正在运行。

流程

  1. 备份所有数据库:

    # 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 的子目录中。要指定不同的位置,请在命令中附加一个目录名称。

  2. 在备份过程中搜索 /var/log/dirsrv/slapd-instance_name/errors 日志。

其他资源

1.2. 在实例离线期间使用命令行备份所有数据库

要在 Directory 服务器实例离线时备份数据库,请使用 dsctl db2bak 命令。

先决条件

  • dirsrv 用户在目标目录中具有写入权限。

    请注意,目录服务器默认使用自己的私有目录。因此,除非您禁用了 PrivateTmp systemd 指令,否则在 /var/tmp//tmp//root/ 目录下备份和导出会失败。

  • 目录服务器实例没有运行。

流程

  1. 备份所有数据库:

    # dsctl instance_name db2bak
    db2bak successful

    默认情况下,dsctl db2bak 将备份存储在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中的 instance_name-YYYY_MM_DD_hh_mm_ss 子目录中。要指定不同的位置,请在命令中附加一个目录名称。

    (可选)将 -v 选项传给命令以显示详细输出:

    # dsctl -v instance_name db2bak
    ...
    DEBUG: Instance allocated
    DEBUG: systemd status -> True
    ...
    INFO: db2bak successful
  2. 在备份过程中搜索 /var/log/dirsrv/slapd-instance_name/errors 日志。
  3. 可选:启动实例:

    # dsctl instance_name start

1.3. 使用 Web 控制台备份所有数据库

目录服务器支持使用 Web 控制台进行数据备份。

重要

当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。

先决条件

  • dirsrv 用户在目标目录中具有写入权限。

    请注意,目录服务器默认使用自己的私有目录。因此,除非您禁用了 PrivateTmp systemd 指令,否则备份和导出 /var/tmp//tmp//root/ 目录会失败。

  • 在 web 控制台中登录到实例。

流程

  1. 单击 Actions 按钮,然后选择 Manage Backups
  2. Create Backup
  3. 输入备份的名称,如时间戳,以指示备份的创建日期和时间。
  4. Create Backup
  5. 要检查备份过程中的日志,请打开 MonitoringLoggingErrors Log 菜单。

服务器使用您在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中输入的名称将备份存储在子目录中。

1.4. 备份配置文件、证书数据库和自定义架构文件

当实例在线或离线时备份数据库时,目录服务器还会备份配置文件、证书数据库和自定义模式文件。dsconf backup createdsctl db2bak 命令将文件备份到 /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/ backup 默认目录中。您可能需要在硬件故障后恢复不同服务器上的实例。

重要

在备份过程中,请勿更新证书数据库。否则,这个数据库在备份中可能不一致。

验证

  • 在备份目录中查找备份的配置文件:

    # 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 条目。

流程

  1. 创建 cn=backup_users,ou=groups,dc=example,dc=com 组:

    # dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
  2. 添加一个访问控制指令(ACI),允许 cn=backup_users,ou=groups,dc=example,dc=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";)
  3. 创建用户:

    1. 创建用户帐户:

      # 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"
    2. 在用户帐户中设置密码:

      # 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"
  4. uid=example,ou=People,dc=example,dc=com 用户添加到 cn=backup_users,ou=groups,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:

    # 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 命令:

      # dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backup create
    • 通过手动创建任务:

      # 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

验证

  • 验证备份是否已创建:

    # 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 用户在备份目录中具有读取权限。
  • 目录服务器实例正在运行。

流程

  1. 从存储在 /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
  2. 在恢复过程中搜索 /var/log/dirsrv/slapd-instance_name/errors 日志的问题。

其他资源

3.2. 在实例离线期间使用命令行恢复所有数据库

要在实例离线时恢复所有数据库,请使用 dsctl bak2db 命令。

先决条件

  • 您有一个目录服务器备份。
  • dirsrv 用户在备份目录中具有读取权限。
  • 目录服务器实例没有运行。

流程

  1. 从存储在 /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 选项传给命令以显示详细输出:

    # 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
  2. 在恢复过程中搜索 /var/log/dirsrv/slapd-instance_name/errors 日志的问题。
  3. 可选:启动实例:

    # dsctl instance_name start

3.3. 使用 Web 控制台恢复所有数据库

目录服务器支持使用 Web 控制台恢复数据。

先决条件

  • 备份存储在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中。
  • dirsrv 用户在备份目录中具有读取权限。
  • 在 web 控制台中登录到实例。

流程

  1. 单击 Actions 菜单,然后选择 Manage Backups。显示的窗口列出了 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中的可用备份。
  2. 打开您要恢复的备份旁边的 Actions 菜单,然后选择 Restore Backup
  3. 单击 Yes 以确认。
  4. 要在恢复过程中检查日志是否有问题,请打开 MonitoringLoggingErrors Log 菜单。

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. 恢复目录服务器复制拓扑

要恢复复制环境中的所有服务器,由两个供应商和两个消费者服务器组成:

  1. 使用 restore 或 import 重新初始化第一个供应商。
  2. 使用复制在线初始化剩余的服务器:

    1. 从第一个供应商初始化第二个供应商。
    2. 初始化来自供应商的消费者。
  3. 在每个服务器上,显示复制状态以验证复制是否正常工作。

在恢复操作过程中,与恢复的数据库关联的 changelog 将被删除。将消息记录到供应商服务器的日志文件,表示需要重新初始化。

3.5. 恢复配置文件、证书数据库和自定义架构文件

您可以从备份中手动恢复配置文件、证书数据库和自定义模式文件。

先决条件

  • 您有一个目录服务器备份。
  • dirsrv 用户在 /var/lib/dirsrv/slapd-instance_name/bak/ backup 目录中具有读取权限。
  • 目录服务器实例没有运行。

流程

  1. 将您要从备份目录恢复的文件复制到目录服务器配置目录中。例如,要恢复 dse.ldif 配置文件,请输入:

    # cp /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/dse.ldif /etc/dirsrv/slapd-instance_name/
  2. 启动实例:

    # dsctl instance_name start

验证

  • 验证服务器是否已恢复服务器配置:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com config get

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.