我知道这更像是一个服务器故障问题,而不是一个 stackoverflow 问题,但由于服务器故障尚未启动,所以我开始:
我应该将应用程序从一台 Redhat 服务器移动到另一台服务器,如果不太了解应用程序的内部工作原理,我如何将 OpenLDAP 数据库从一台机器移动到另一台机器(包括架构和所有内容)。
我需要复制哪些文件?我相信设置非常标准。
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
(添加)标志已打开。
使用 slapcat 导出您的数据库:
slapcat > ldif
使用 slapadd 导入数据库(确保 LDAP 服务器已停止):
slapadd -l ldif
include /etc/ldap/schema/core.schema
slapcat 命令将完整的 LDAP 树导出到单个/多个 ldif 文件。
ldapadd 将 ldif 文件导入到新的 LDAP 安装中。
首先确保两台服务器上具有相同的架构。
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 连接的其他副产品,因此不会更改数据。 (Matt Butcher,“掌握 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
即使目标域已经存在(我的情况)也可以继续。