如何克隆 OpenLDAP 数据库

问题描述 投票:0回答:6

我知道这更像是一个服务器故障问题,而不是一个 stackoverflow 问题,但由于服务器故障尚未启动,所以我开始:

我应该将应用程序从一台 Redhat 服务器移动到另一台服务器,如果不太了解应用程序的内部工作原理,我如何将 OpenLDAP 数据库从一台机器移动到另一台机器(包括架构和所有内容)。

我需要复制哪些文件?我相信设置非常标准。

linux ldap redhat openldap
6个回答
48
投票

SourceRebels 的答案的问题在于,

slapcat(8)
不能保证数据是按
ldapadd(1)
/
ldapmodify(1)
排序的。

来自

man slapcat
(来自 OpenLDAP 2.3):

该工具生成的LDIF适合与slapadd(8)一起使用。
由于条目按数据库顺序排列,而不是上一级顺序,因此它们
如果不先重新排序,则无法使用 ldapadd(1) 加载。

(仅供参考:在 OpenLDAP 2.4 中,部分被重新表述并进行了扩展。)

加上使用后端文件转储数据库的工具,然后使用通过ldap协议加载ldif的工具,不太一致。

我建议使用

slapcat(8)
/
slapadd(8)
OR
ldapsearch(1)
/
ldapmodify(1)
的组合。我更喜欢后者,因为它不需要 shell 访问 ldap 服务器或移动文件。

例如,从 dc=master,dc=com 下的主服务器转储数据库并将其加载到备份服务器中

$ ldapsearch -Wx -D "cn=admin_master,dc=master,dc=com" -b "dc=master,dc=com" -H ldap://my.master.host -LLL > ldap_dump-20100525-1 .ldif
$ ldapadd -Wx -D "cn=admin_backup,dc=backup,dc=com" -H ldap://my.backup.host -f ldap_dump-20100525-1.ldif
上面的

-W

 标志提示输入 ldap 
admin_master
 密码,但是由于我们将输出重定向到文件,因此您不会看到提示 - 只是一个空行。  继续输入您的 ldap 
admin_master
 密码并 
enter 即可运行。 在运行 Enter LDAP Password:
 之前,需要删除输出文件的第一行 (
ldapadd
)。

最后提示,

ldapadd(1)

 是到 
ldapmodify(1)
 的硬链接,且 
-a
(添加)标志已打开。


22
投票
ldapsearch 和 ldapadd 不一定是克隆 LDAP 数据库的最佳工具。 slapcat 和 slapadd 是更好的选择。

使用 slapcat 导出您的数据库:

slapcat > ldif

使用 slapadd 导入数据库(确保 LDAP 服务器已停止):

slapadd -l ldif
    

10
投票
一些约会:

    将您的个性化模式和对象类定义保存在新服务器上。例如,您可以在 slapd.conf 中查找包含的文件来获取它(这是我的 slapd.conf 的一部分):
include /etc/ldap/schema/core.schema



8
投票
我更喜欢通过协议复制数据库:

首先确保两台服务器上具有相同的架构。

  • 使用 ldapsearch 转储数据库:

    ldapsearch -LLL -Wx -D "cn=admin,dc=domain" -b "dc=domain" > domain.ldif
    
    
  • 并将其导入到新服务器中:

    ldapmodify -Wx -D "cn=admin,dc=domain" -a -f domain.ldif
    
    
一行:

ldapsearch -LLL -Wx -D "cn=admin,dc=domain" -b "dc=domain" | ldapmodify -w pass -x -D "cn=admin,dc=domain" -a
通过使用 bin/ldap* 命令,您可以直接与服务器对话,同时使用 bin/slap* 命令您可以处理后端文件


3
投票
(没有足够的声誉来写评论...)

Ldapsearch 打开与 LDAP 服务器的连接。 相反,Slapcat 直接访问数据库,这意味着不会评估 ACL、时间和大小限制以及 LDAP 连接的其他副产品,因此不会更改数据。 (Matt Butcher,“掌握 OpenLDAP”)


2
投票
谢谢,维什。效果非常好!我编辑了命令:

ldapsearch -z max -LLL -Wx -D "cn=Manager,dc=domain,dc=fr" -b "dc=domain,dc=fr" >/tmp/save.ldif ldapmodify -c -Wx -D "cn=Manager,dc=domain,dc=fr" -a -f /tmp/save.ldif

刚刚添加

-z max

 以避免大小限制,并且 
-c
 即使目标域已经存在(我的情况)也可以继续。

© www.soinside.com 2019 - 2024. All rights reserved.