6.2. 导出数据
LDAP 数据交换格式(LDIF)文件用于从 Directory Server 数据库导出数据库条目。LDIF 是 RFC 2849 中所述的标准格式。
注意
导出操作不会导出配置信息(cn=config)、架构信息(cn=schema)或监控信息(cn=monitor)。
导出数据可用于以下内容:
- 备份数据库中的数据。
- 将数据复制到其他目录服务器.
- 将数据导出到另一个应用程序。
- 在更改目录拓扑后重新填充数据库。例如,如果目录包含一个数据库,并且其内容应分割为两个数据库,那么两个新数据库应通过导出旧数据库的内容并导入到两个新数据库中来接收其数据,如 图 6.1 “将数据库内容分成两个数据库” 所示。
图 6.1. 将数据库内容分成两个数据库
警告
不要在导出操作期间停止服务器。
目录服务器以
dirsrv
用户身份运行导出操作。因此,目标目录的权限必须允许此用户写入该文件。
6.2.1. 使用命令行将数据导出到 LDIF 文件中 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
目录服务器支持在实例正在运行或实例离线时导出数据:
- 如果实例正在运行,请使用以下方法之一:
- 使用 dsconf backend export 命令。请参阅 第 6.2.1.1.1 节 “使用 dsconf backend export 命令导出数据库”。
- 创建 cn=tasks 条目。请参阅 第 6.2.1.1.2 节 “使用 cn=tasks Entry 导出数据库”。
- 如果实例离线,请使用 dsctl db2ldif 命令。请参阅 第 6.2.1.2 节 “导出数据库,但服务器处于离线状态”。
重要
由于以下原因,不要将 LDIF 文件导出到
/tmp
或 /var
/tmp/ 目录中:
- 目录服务器默认使用
systemd
的PrivateTmp
功能。如果您将 LDIF 文件放在/tmp
或/var/tmp/
系统目录中,目录服务器在导入过程中不会看到这些 LDIF 文件。有关PrivateTmp
的更多信息,请参阅systemd.exec (5)
手册页。 - LDIF 文件通常包含敏感数据,如用户密码。因此,您不能使用临时系统目录来存储这些文件。
6.2.1.1. 导出数据库,但服务器正在运行 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
6.2.1.1.1. 使用 dsconf backend export 命令导出数据库 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 dsconf backend export 命令自动创建将数据导出到 LDIF 文件的任务。
例如,要导出
userRoot
数据库:
dsconf -D "cn=Directory Manager" ldap://server.example.com backend export userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend export userRoot
The export task has finished successfully
默认情况下,
dsconf
将导出存储在 /var/lib/dirsrv/slapd -instance_name/export/
目录中的名为instance_name_database_name-time_stamp.ldif
的文件中。或者,在命令中添加 the -l file_name
选项来指定不同的位置。
dsconf backend export 命令支持额外的选项,例如排除特定的后缀。要显示所有可用的选项,请输入:
dsconf ldap://server.example.com backend export --help
# dsconf ldap://server.example.com backend export --help
6.2.1.1.2. 使用 cn=tasks Entry 导出数据库 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Directory Server 配置中的 cn=tasks,cn=config 条目是服务器用来管理任务的临时条目的容器条目。要启动导出操作,请在 cn=export,cn=tasks,cn=config 条目中创建一个任务。
使用任务条目可让您在服务器运行时导出数据。
导出任务条目需要以下属性:
cn
: 设置任务的唯一名称。nsInstance
:设置要导出的数据库的名称。nsFilename
:设置应将导出存储到的文件的名称。
导出任务支持其他参数,例如排除后缀。有关完整列表,请参阅 红帽目录服务器配置、命令和文件参考中的 cn=export 部分。
例如,添加一个将
userRoot
数据库内容导出到 /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
文件的任务:
任务完成后,该条目会从目录配置中删除。
6.2.1.2. 导出数据库,但服务器处于离线状态 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如果在导出数据时服务器离线,请使用 dsctl db2ldif 命令:
- 停止实例:
dsctl instance_name stop
# dsctl instance_name stop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将数据库导出到 LDIF 文件中。例如,要将
userRoot
数据库导出到/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
文件中: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
6.2.2. 使用 Web 控制台将后缀导出到 LDIF 文件 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台导出后缀:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开菜单。
- 选择后缀条目。
- 点 Export Suffix。,并选择
- 输入您要在其中存储导出的 LDIF 文件的名称。目录服务器将使用指定文件名将文件存储在
/var/lib/dirsrv/slapd-instance_name/ldif/
目录中。 - 单击。
6.2.3. 启用组成员以导出数据并执行导出为组成员之一 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以配置组成员具有导出数据的权限。这提高了安全性,因为您不再需要在脚本中设置
cn=Directory Manager
的凭证。另外,您可以通过修改组来轻松授予和撤销导出权限。
6.2.3.1. 启用组来导出数据 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用这个流程添加
cn=export_users,ou=groups,dc=example,dc=com
组,并启用此组的成员来创建导出任务。
流程
- 创建
cn=export_users,ou=groups,dc=example,dc=com
组:dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn export_users
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn export_users
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 添加允许
cn=export_users,ou=groups,dc=example,dc=com
组的成员创建导出任务的访问控制指令(ACI):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"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 将
uid=example,ou=People,dc=example,dc=com
用户添加到cn=export_users,ou=groups,dc=example,dc=com
组中:dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group add_member export_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 export_users uid=example,ou=People,dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 显示 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
# 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=export,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow export_users group to export data" ; allow (add, read, search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";) aci: (target = "ldap:///cn=config")(targetattr = "objectclass || cn || nsslapd-suffix || nsslapd-ldifdir")(version 3.0 ; acl "permission: Allow export_users group to access ldifdir attribute" ; allow (read,search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";) ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3.2. 以普通用户身份执行导出 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以以普通用户而不是
cn=Directory Manager
执行导出。
前提条件
- 您启用了
cn=export_users,ou=groups,dc=example,dc=com
组的成员来导出数据。请参阅 第 6.2.3.1 节 “启用组来导出数据”。 - 您用来执行导出的用户是
cn=export_users,ou=groups,dc=example,dc=com
组的成员。
流程
- 使用以下方法之一创建 export 任务:
- 使用 dsconf backend export 命令:
dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backend export userRoot
# dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backend export userRoot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 通过手动创建任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 验证是否已创建备份:
ls -l /var/lib/dirsrv/slapd-instance_name/ldif/*.ldif
# ls -l /var/lib/dirsrv/slapd-instance_name/ldif/*.ldif total 0 -rw-------. 1 dirsrv dirsrv 10306 Jul 23 12:55 None-userroot-2021_07_23_12_55_00.ldif ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow