我知道这更像是一个 serverfault 问题而不是一个 stackoverflow 问题,但是由于 serverfault 还没有启动,所以我开始了:
我应该将应用程序从一台 redhat 服务器移动到另一台服务器,并且在不了解应用程序的内部工作原理的情况下,我如何将 OpenLDAP 数据库从一台机器移动到另一台机器,以及模式和所有内容。
我需要复制哪些文件?我相信设置是相当标准的。
SourceRebels回答的问题在于,slapcat(8)
不能保证数据是为ldapadd(1)
/排序的ldapmodify(1)
。从手册页:
此工具生成的 LDIF 适合与 slapadd(8) 一起使用。 由于条目是按数据库顺序排列的,而不是优先顺序,它们 如果不先重新排序,则无法使用 ldapadd(1) 加载。
加上使用一个工具,使用后端文件转储数据库,然后使用一个通过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 密码,它就会起作用。在运行 ldapadd 之前,需要删除输出文件的第一行(输入 LDAP 密码:)。
最后一个提示是打开(添加)标志ldapadd(1)
的硬链接。ldapmodify(1)
-a
ldapsearch 和 ldapadd 不一定是克隆 LDAP 数据库的最佳工具。slapcat 和 slapadd 是更好的选择。
使用 slapcat 导出数据库:
slapcat > ldif
使用 slapadd 导入数据库(确保 LDAP 服务器已停止):
slapadd -l ldif
我更喜欢通过协议复制数据库:
首先确保您在两台服务器上具有相同的架构。
- 使用 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* 命令,您正在处理后端文件
(没有足够的声誉来写评论......)
Ldapsearch 打开与 LDAP 服务器的连接。Slapcat 直接访问数据库,这意味着不评估 ACL、时间和大小限制以及 LDAP 连接的其他副产品,因此不会更改数据。(马特·布彻,“掌握 OpenLDAP”)
谢谢,维什。像魅力一样工作!我编辑了命令:
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
即使目标域已经存在(我的情况)也可以继续。