备份 LDAP 数据库

备份 LDAP 数据库

我正在尝试将 LDAP 服务器从版本 2.4.23 备份到新的 2.4.40 版本。在软件包初始配置期间,系统询问我一些问题,我用有关数据库的实际事实来回答这些问题,以期获得与旧服务器相同的配置。但是,一旦我完成配置,就会发现它没有产生预期的配置。

以下是旧服务器的配置(通过 获取slapcat -n0):

dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcPidFile: /var/run/slapd/slapd.pid
structuralObjectClass: olcGlobal
entryUUID: cde5ce8a-bf8f-1030-9594-7f29588dac90
creatorsName: cn=config
createTimestamp: 20111220195151Z
olcLogLevel: Stats
olcTLSCertificateFile: /etc/ssl/certs/ufpa.br.crt
olcTLSCertificateKeyFile: /etc/ssl/private/ufpa.br.key
olcToolThreads: 4
olcSizeLimit: unlimited
entryCSN: 20111222143131.011291Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111222143131Z

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}syncprov
structuralObjectClass: olcModuleList
entryUUID: cdeca534-bf8f-1030-959c-7f29588dac90
creatorsName: cn=admin,cn=config
createTimestamp: 20111220195151Z
entryCSN: 20111220195151.317803Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111220195151Z

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
structuralObjectClass: olcSchemaConfig
entryUUID: cde86cda-bf8f-1030-9597-7f29588dac90
creatorsName: cn=admin,cn=config
createTimestamp: 20111220195151Z
entryCSN: 20111220195151.290145Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111220195151Z

以下是我从新安装的服务器获得的信息(带有slapcat):

dn: dc=ufpa,dc=br
objectClass: top
objectClass: dcObject
objectClass: organization
o: UFPA
dc: ufpa
structuralObjectClass: organization
entryUUID: 90e79216-16d2-1037-8dbb-11462ab3e25c
creatorsName: cn=admin,dc=ufpa,dc=br
createTimestamp: 20170816132842Z
entryCSN: 20170816132842.412456Z#000000#000#000000
modifiersName: cn=admin,dc=ufpa,dc=br
modifyTimestamp: 20170816132842Z

dn: cn=admin,dc=ufpa,dc=br
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RC9YcU5KVFF1UHB0c0Nkc2pObUgrV2NSZHFVM3JWUkI=
structuralObjectClass: organizationalRole
entryUUID: 90e8e2b0-16d2-1037-8dbc-11462ab3e25c
creatorsName: cn=admin,dc=ufpa,dc=br
createTimestamp: 20170816132842Z
entryCSN: 20170816132842.421067Z#000000#000#000000
modifiersName: cn=admin,dc=ufpa,dc=br
modifyTimestamp: 20170816132842Z

尝试导入从旧服务器生成的文件产生以下结果:

slapadd: could not add entry dn="cn=config" (line=1):
_                       0.35% eta   none elapsed            none spd   2.0 M/s
Closing DB...

如果我尝试仅导入用户和计算机的信息,我会得到以下信息:

slapadd: line 1: database #1 (dc=ufpa,dc=br) not configured to hold "o=UFPA"; no database configured for that naming context
_                       0.00% eta    31s elapsed            none spd   1.9 M/s
Closing DB...

我还使用以下方法转储了原始数据库ldapsearch -x -D "cn=admin,o=UFPA" -w 'admin_passwd' -b "o=UFPA" -H ldap://localhost -LLL "*" "+" > ldap_dump.ldif

然后尝试使用恢复ldapadd -Wx -D "cn=admin,dc=ufpa,dc=br" -h localhost -f ldap_dump.ldif

但这就是我得到的:

adding new entry "o=UFPA"
ldap_add: Server is unwilling to perform (53)
        additional info: no global superior knowledge

有人能帮我解决这个问题吗?

答案1

当你想恢复完整cn=配置从另一台服务器备份,最好从一个空的配置目录开始(在我看来)。在 Debian 和 Ubuntu 上,安装程序将为您创建基本配置,这可能是导入失败的原因cn=config,因为它已经存在。

这里有 2 个选项:

  • 忽略错误并继续导入使用-c选项slapadd
  • 从空白配置目录开始并从 ldif 文件导入所有配置。

以下是我的做法。

在旧服务器上:

slapcat -b cn=config > config.ldif

在新服务器上:

# backup current config
tar -czf /var/backups/openldap.config-$(date +%y%m%d).gz /etc/ldap/slapd.d
# delete current config
rm -rf /etc/ldap/slapd.d/*
# import config file copied from old server
slapadd -F /etc/ldap/slapd.d/ -b cn=config -l config.ldif

您收到no global superior knowledge错误是因为 OpenLDAP 没有数据库来存储dn: dc=ufpa,dc=br。如果在旧服务器中正确配置了它,则上述方法应该会将其全部转移到新服务器。然后您还可以像下面这样备份和恢复该数据库。

在旧服务器上:

slapcat -b dc=ufpa,dc=br > ufpa.br.ldif

在新服务器上:

# backup current database
tar -czf /var/backups/openldap.data-$(date +%y%m%d).tgz /var/lib/ldap
# delete current database
rm -rf /var/lib/ldap/*.*
# restore backup from old server
slapadd -b ufpa.br.ldif

如果您收到无法添加条目 dn="dc=ufpq,dc=br" 的错误,则配置备份中的某些内容可能已创建它。尝试使用-c最后一个slapadd命令上的选项。

答案2

理智的人使用syncrepl复制/备份他们的数据库。


您省略了太多细节,无法提供进一步帮助。例如,这不可能是旧服务器配置的全部,当然也不包含所有相关部分。它没有配置后缀。

答案3

如果无法使用 -c 作为 slapadd 并出现错误,请尝试使用 slapadd -F /etc/ldap/slapd.d/ -l ufpa.br.ldif 。使用前请确保 /var/lib/ldap 为空,并在恢复后将所有权设置为 ldap 用户。

相关内容