6.3. 备份目录服务器
目录服务器中的备份包含:
- 所有数据库文件,包括存储在这些数据库中的数据注意目录服务器不支持备份单个数据库。
- 事务日志
- Indices
与备份不同,您可以导出数据,如 第 6.2 节 “导出数据” 所述。使用导出功能从 LDAP 数据交换格式(LDIF)格式的服务器导出特定数据,如子树。
警告
不要在备份操作期间停止服务器。
目录服务器以
dirsrv
用户身份运行备份任务。因此,目标目录的权限必须允许此用户创建文件。
6.3.1. 使用命令行备份所有数据库
目录服务器支持在实例正在运行或实例离线时备份数据库:
- 如果实例正在运行,请使用以下方法之一:
- 使用 dsconf backup create 命令。请参阅 第 6.3.1.1.1 节 “使用 dsconf backup create 命令备份所有数据库”。
- 创建 cn=tasks 条目。请参阅 第 6.3.1.1.2 节 “使用 cn=tasks 条目备份所有数据库”。
- 如果实例离线,请使用 dsctl db2bak 命令。请参阅 第 6.3.1.2 节 “备份所有数据库,但服务器为 Offline”。
重要
这些方法仅备份数据库。有关备份其他重要文件的详情,如配置,请参阅 第 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 命令:
- 停止实例:
# dsctl instance_name stop
- 备份数据库:
# dsctl instance_name db2bak db2bak successful
注意dsctl db2bak 命令以dirsrv
用户身份运行备份。因此,目标目录的权限必须允许此用户创建文件和目录。如果您没有将目标目录附加到命令,服务器会将备份存储在/var/lib/dirsrv/slapd-instance_name/bak/
目录中的名为instance_name-time_stamp
的子目录中。 - 启动实例:
# dsctl instance_name start
6.3.2. 使用 Web 控制台备份所有数据库
使用 Web 控制台,您可以在线备份。
重要
当数据库从在线备份中恢复时,目录服务器会清理 changelog。因此,使用在线备份需要在数据库恢复后重新初始化副本。要避免重新初始化,请使用离线备份。
使用 Web 控制台备份实例的所有数据库:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 单击 Actions 按钮,然后选择 Manage Backup。
- 点 Create Backup。
- 输入备份的名称,如指示备份的创建日期和时间的时间戳。
- 点 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
组成员,并启用此组的成员创建备份任务。
流程
- 创建
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
- 添加访问控制指令(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";)
- 创建用户:
- 创建用户帐户:
# 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" 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
组中:# 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
执行备份。
先决条件
- 您已启用了
cn=backup_users,ou=groups,dc=example,dc=com
组的成员来执行备份。请参阅 第 6.3.4.1 节 “启用组备份目录服务器”。 - 用于执行备份的用户是
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 ...