
我們正在嘗試將 ldap 從過時的 Debian 伺服器遷移到 Ubuntu 伺服器。所有使用 slapcat、手動修改配置和其他技巧的嘗試都失敗了。我相信舊資料庫使用 bdb 結構,透過研究我發現它不再受支援。
我們在遷移過程中所採取的步驟如下:
使用 slapcat 備份並複製舊的 ldap 資料庫。
sudo slapcat -n 0 -l config.conf
sudo slapcat -n 1 -l database.ldif
然後,我們在新伺服器上安裝並重新配置了 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