備份 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
誰能幫我解決這個問題?
當您想從另一台伺服器恢復完整的cn=config備份時,最好從一個空的 config 目錄開始(在我看來)。在 Debian 和 Ubuntu 上,安裝程序將為您創建基本配置,這可能是它無法 import
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