6.3. 备份目录服务器

目录服务器中的备份包含:
  • 所有数据库文件,包括存储在这些数据库中的数据
    注意
    目录服务器不支持备份单个数据库。
  • 事务日志
  • Indices
与备份不同,您可以导出数据,如 第 6.2 节 “导出数据” 所述。使用导出功能从 LDAP 数据交换格式(LDIF)格式的服务器导出特定数据,如子树。
警告
不要在备份操作期间停止服务器。
目录服务器以 dirsrv 用户身份运行备份任务。因此,目标目录的权限必须允许此用户创建文件。

6.3.1. 使用命令行备份所有数据库

目录服务器支持在实例正在运行或实例离线时备份数据库:
重要
这些方法仅备份数据库。有关备份其他重要文件的详情,如配置,请参阅 第 6.3.3 节 “备份配置文件、证书数据库和自定义架构文件”

6.3.1.1. 备份服务器的所有数据库正在运行

6.3.1.1.1. 使用 dsconf backup create 命令备份所有数据库
使用 dsconf backup create 命令自动创建备份所有数据库的任务。
重要
当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。
例如,要备份所有数据库,请运行:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup create
The backup create task has finished successfully
默认情况下,dsconf/var/lib/dirsrv/slapd-instance_name/bak/ 目录中的名为 instance_name-time_stamp 的子目录中保存备份。要指定不同的位置,请在命令中附加目录名称。
6.3.1.1.2. 使用 cn=tasks 条目备份所有数据库
Directory 服务器配置中的 cn=tasks,cn=config 条目是服务器用来管理任务的临时条目的容器条目。要启动备份操作,请在 cn=backup,cn=tasks,cn=config 条目中创建任务。
通过使用任务条目,您可以在服务器运行时备份数据库。
备份任务条目需要以下属性:
  • cn :设置任务的唯一名称。
  • nsDatabaseType :将数据库的类型设置为备份。目录服务器仅支持此属性中的 ldbm 数据库 值。
备份任务支持额外的参数,例如,将不同的目标目录指定为默认值 /var/lib/dirsrv/slapd-instance_name/bak/。有关完整列表,请参阅红帽目录服务器配置、命令和文件参考中的 cn=backup 部分。
例如,备份所有数据库并将存档存储在默认备份目录中:
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=example_backup,cn=export,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example_backup
nsDatabaseType: ldbm database
如果没有指定 nsArchiveDir 属性,服务器会将备份存储在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中的名为 instance_name-time_stamp 的子目录中。
任务完成后,该条目将从目录配置中删除。

6.3.1.2. 备份所有数据库,但服务器为 Offline

如果在备份数据库时服务器离线,请使用 dsctl db2bak 命令:
  1. 停止实例:
    # dsctl instance_name stop
  2. 备份数据库:
    # dsctl instance_name db2bak
    db2bak successful
    注意
    dsctl db2bak 命令以 dirsrv 用户身份运行备份。因此,目标目录的权限必须允许此用户创建文件和目录。
    如果您没有将目标目录附加到命令,服务器会将备份存储在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中的名为 instance_name-time_stamp 的子目录中。
  3. 启动实例:
    # dsctl instance_name start

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

使用 Web 控制台,您可以在线备份。
重要
当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。
使用 Web 控制台备份实例的所有数据库:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 单击 Actions 按钮,然后选择 Manage Backup
  4. Create Backup
  5. 输入备份的名称,如指示备份的创建日期和时间的时间戳。
  6. Create Backup
服务器将备份存储在 /var/lib/dirsrv/slapd-instance_name/bak/ 目录中的名称的子目录。

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

集成到目录服务器中的备份机制只备份数据库。但是,在 /etc/dirsrv/slapd-instance_name/ 目录中存储了额外的文件,例如,在硬件故障后恢复不同服务器上的实例。
注意
Web 控制台中不支持备份配置目录。

例 6.2. 如何备份 /etc/dirsrv/slapd-instance_name/ Directory

要备份 /etc/dirsrv/slapd-instance_name/ 的内容,您可以复制目录或将其存储在存档文件中。例如,要将 /etc/dirsrv/slapd-instance_name/ 目录中的内容存储在 / root/config_slapd-instance_name_time_stamp.tar.gz 文件中:
# cd /etc/dirsrv/
# tar -zcvf /root/config_slapd-instance_name_$(date +%Y-%m-%d_%H-%M-%S).tar.gz slapd-instance_name/
重要
在备份过程中,不要更新证书数据库。否则,这个数据库在备份中可能不一致。

6.3.4. 启用组的成员来备份目录服务器,并以一个组成员身份执行备份

您可以配置组的成员具有备份实例的权限并执行备份。这提高了安全性,因为您不再需要在备份脚本或 cron 作业中设置 cn=Directory Manager 的凭证。另外,您可以通过修改组来轻松地授予和撤销备份权限。

6.3.4.1. 启用组备份目录服务器

使用这个流程添加 cn=backup_users,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";)
    ...

6.3.4.2. 以普通用户身份执行备份

您可以以普通用户而不是 cn=Directory Manager 执行备份。

先决条件

流程

  • 使用以下方法之一创建备份任务:
    • 使用 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
    ...