LDAP:使用 slapcat 与 ldapsearch 进行备份

set*_*voy 16 openldap slapd

用过的: openldap-servers-2.4.23-34.el6_5.1.x86_64

任务:创建脚本crontab以创建计划的数据库完整备份。

1) slapcat- 以默认格式 Berkeley DB 创建文件。

2)slapcat可以在slapd运行时完成(如果bdb/hdb使用数据库)。

3) 后恢复文件slapcat- 必须使用slapadd(不是ldapadd)。

4)slapcat/add不需要密码。

5)slapadd只有在slapd停止时才能完成。

例子:

 $ slapcat -f /etc/openldap/slapd.conf -b "dc=db_1" -l db_1_backup.ldif
 $ slapadd -l db_1_backup.ldif
Run Code Online (Sandbox Code Playgroud)

而不是slapcat/add- 让我们来看看ldapsearch/add

1) ldapsearch- 创建文件与几乎相同的信息slapcat;

2) ldapadd- 可以使用文件 from ldapsearch,不需要slapd停止;

3) ldapadd/search- 需要密码。

例子:

 $ ldapsearch -D "cn=root,dc=db_1" -W -b "dc=db_1" "dc=db_1" -LLL > db_1_backup2.ldif
 $ ldapadd -x -D "cn=root,dc=db_1" -W -f db_1_backup2.ldif
Run Code Online (Sandbox Code Playgroud)

所以 - 问题是:

1) 我在这个工具描述中遗漏了什么吗?

2)ldapadd/slapadd和之间还有ladpsearch/slapcat什么区别?

mr.*_*tic 14

总结不错,补充几点:

  • slapcat无论(本地)直接存储后端是什么,它都不必是 Berkeley(hdb 或 bdb),它也可以与OLC ( cn=config) 一起使用。它转储为LDIF 格式。(直接我的意思是由 OpenLDAP 直接管理,而不是例如 SQL 后端,即使它存储在本地。)
  • ldapadd要求 slapd正在运行,slapadd要求它没有运行
  • ldapsearch正如您所指出的,要求slapd 正在运行,slapcat并不关心它是否与 BDB 后端一起运行

简而言之:

  • slapcat是获得可以快速恢复的良好备份的方法,尽管主服务器会停机(您可以通过设置各种类型的复制来解决此问题)。这是您应该用于常规备份和升级前备份的内容。
  • ldapsearch(没有+)将为您提供一个便携式备份,您可以轻松地将其加载到任何其他目录服务器中,但它只能在简单的 OpenLDAP 设置(无复制、无特殊覆盖、无重写)中进行可行的恢复,并且如果您不关心保留 UUID/创建/修改元数据。您还需要与数据一起使用的任何额外架构文件。
  • ldapadd(使用其其他身份ldapmodify)可用于轻松应用 LDAP 修改(对象修改、删除和重命名),这些修改单独使用slapadd/是不可行或不可能的slapcat

对于大多数管理员而言,主要考虑因素来自每种情况下 LDIF 的略有不同的内容,以及slapd运行(或不运行)的要求。更重要的区别是:

  1. slapcat更快,因为它只是转储数据库,跳过 LDAP 协议开销、身份验证、访问控制、对象和时间限制、覆盖;它不会根据 LDAP 层次结构进行搜索。
  2. slapadd更快(同样,没有 LDAP 协议开销),并且在您恢复已知良好备份的情况下,您可以在快速模式( -q)运行以加速大型导入。您还可以禁用模式检查 ( -s),但请注意,OpenLDAP 版本之间的模式或数据验证的小变化并非闻所未闻。
  3. slapcat仅限于本地数据库,它不会像那样跨越到其他目录(例如,使用back-ldap, back-metaldapsearch。这同样适用于slapadd/ ldapadd
  4. ldapsearch将返回未存储在后端的动态属性,例如hasSubordinates或由叠加层维护的那些(例如slapo-memberof)。您将在加载这些时遇到问题ldapadd(例如,无需用户修改的操作属性)。重写 (slapo-rwm) 也可能会扭曲ldapsearch对目录内容的看法。
  5. slapcat包括内部(操作)属性,如果您使用复制,这些属性很重要。通过复制,您对备份的依赖程度会降低,但是如果您使用ldapadd重新加载主服务器,则每个对象都将通过复制(已更改)重新创建entryUUID entryCSN尽管您可以通过使用特殊的“+”属性ldapsearch(或allop覆盖)来包含操作属性,这与 不同slapcat,请参阅上一点了解为什么会这样。这些属性还包括创建/修改 DN 和时间戳,这对某些应用程序可能很重要。
  6. 因为slapcat不遵守 LDAP 层次结构(隐式排序),所以不能保证其数据排序是可行的ldapadd- 即,即使您去掉操作属性,ldapadd也会抱怨,因为下级可能会出现在他们的上级(父母)之前. LDAP 规范要求存在父项,但在这方面也未定义搜索结果排序。请参阅下面的 Howard 评论,OpenLDAPslapadd静默支持某些后端的无序数据。在紧要关头,您可以重复使用slapaddcontinue on error 选项 ( -c),直到创建所有“无序”父项,当您不再收到任何错误代码 32(没有这样的对象,
  7. ldapadd 受 LDAP 规则和覆盖的约束,例如参照完整性、ppolicy(密码策略)
  8. slapcat更喜欢至少为 userPassword 使用 base-64 编码的属性值(::在属性名称后表示)
  9. ldapsearch具有更多用于 LDIF 格式和将大属性写入单独文件的选项。它还可以处理引用别名

  • OpenLDAP 中的搜索结果顺序是故意没有记录的。由于规范已经说明结果可以按任何顺序排列,因此客户端软件不得依赖任何特定顺序。当然可以对结果进行排序,但这需要更多的资源,并且在进行完整备份时通常并不有趣。考虑到子树重命名将分支移动到新 DIT 位置的可能性,数据库顺序相对没有意义。 (2认同)