我们正在尝试将 ldap 从过时的 Debian 服务器迁移到 Ubuntu 服务器。使用 slapcat、手动修改配置和其他技巧的所有尝试都失败了。我相信旧数据库使用 bdb 结构,通过研究我发现它不再受支持。
我们在迁移过程中采取的步骤如下:
使用 slapcat 备份并复制旧的 ldap 数据库。
sudo slapcat -n 0 -l config.conf
sudo slapcat -n 1 -l database.ldif
然后,我们在新服务器上安装并使用 dpkg 重新配置了 slapd,以匹配旧服务器的安装规范。
接下来,我们将使用 slapadd 来恢复旧数据库。
sudo slapadd -F /etc/ldap/slapd.d -n 0 -l config.conf
产生了以下错误
slapadd: could not add entry dn="cn=config" (line=1):
Closing DB...
下一个命令我们尝试恢复数据库。
sudo slapadd -F /etc/ldap/slapd.d -n 1 -l database.ldif
但再次收到多个错误:
mdb_id2entry_put: mdb_put failed: MDB_KEYEXIST: Key/data pair already exists (-30799) "dc=cs"
=> mdb_tool_entry_put: id2entry_add failed: err=-30799
=> mdb_tool_entry_put: txn_aborted! MDB_KEYEXIST: Key/data pair already exists (-30799)
slapadd: could not add entry dn="dc=cs" (line=1): txn_aborted! MDB_KEYEXIST: Key/data pair already exists (-30799)
Closing DB...
此时我们在加载配置文件时遇到错误。我们尝试将其从 bdb 转换为 mdb 架构,但在加载 database.ldif 文件时仍然会出错。
有人有将 ldap 数据库迁移到新服务器的可靠方法吗?因为大多数指南都非常过时。
答案1
该错误是由于大多数旧 slapd 系统 (<2.4.x) 上的数据库后端已过时而导致的。手动转换为 hdb/bdb => mdb 可修复新 slapd 版本上的这些问题。
sudo slapcat -n 0 -l config.conf
sudo slapcat -n 1 -l database.ldif
确保关闭 slapd 服务。
service slapd stop
在 config.conf 和 database.ldif 文件中的所有 hdb/bdb 引用都用 mdb 替换。
在使用 slapadd 加载配置之前,请清空 slapd.d 目录。
rm -rf /etc/ldap/slapd.d/*
然后加载更新的 mdb 配置。
slapadd -F /etc/ldap/slapd.d -n 0 -l config.conf
接下来确保清空 ldap 目录。
rm -rf /var/lib/ldap/*
现在加载转换后的 mdb 数据库。
slapadd -F /etc/ldap/slapd.d -n 1 -l database.ldif
授予 openldap 对 slapd.d 目录的权限。
chown -R openldap:openldap /etc/ldap/slapd.d
启动 slapd 服务,您现在应该有一个迁移的 ldap 数据库。
service slapd start
使用 slapcat 确认
slapcat -n 0
slapcat -n 1