web-dev-qa-db-ja.com

OpenLDAPバックアップの復元

バックアップと復元をセットアップして、それが機能することを確認しようとしています。

ldap.oldのデータベースサイズはldapよりはるかに大きいことに注意してください。 /var/lib/ldap.oldは私の既存のデータベースです。バックアップ/復元テストのために/var/lib/ldapに名前を変更しました。

復元すると次のエラーが表示されます。このため、すべてを正常に復元できたかどうかはわかりません。

...
added: "uid=user11123,ou=Abcd,ou=Industry Professional,dc=testdomain,dc=org" (0001cc9f)
added: "uid=user13123,ou=Abcd,ou=Industry Professional,dc=testdomain,dc=org" (0001cca0)
Error, entries missing!
  entry 79870: ou=industryprofessional,dc=testdomain,dc=org
  entry 79871: ou=abcd professional,ou=industryprofessional,dc=testdomain,dc=org

ディスクの使用状況:

[root@openldap]# du -khs ldap ldap.old/
3.3G    ldap
4.0G    ldap.old/

これが私のバックアップ/復元プロセスです:

バックアップ:

slapcat -v -l backup_openldap.ldif

戻す:

/etc/init.d/ldap stop
mv /var/lib/ldap /var/lib/ldap.old
mkdir /var/lib/ldap
chmod go-rwx /var/lib/ldap
cp –rfp /var/lib/ldap.old/DB_CONFIG /var/lib/ldap

slapadd –v –l backup_openldap.ldif

chown ldap:ldap /var/lib/ldap
/etc/init.d/ldap start

すべてのレコードが正常に復元されたことを確認するにはどうすればよいですか?

6
Raza

まず最初に、slapcatの 制限 に注意する必要があります。

_For some backend types, your slapd(8) should not be running 
(at least, not in read-write mode) when you do this to ensure 
consistency of the database. It is always safe to run slapcat 
with the slapd-bdb(5), slapd-hdb(5), and slapd-null(5) backends. 
_

したがって、backupを_/etc/init.d/ldap stop_および_/etc/init.d/ldap start_にもパックする方がよいでしょう。

復元手順でldapを再起動する前に、ロードしたばかりのデータを一時ファイルにダンプし、それを入力として使用したLDIFファイルと比較できます。 slapcatのLDIF出力は識別名でソートされるので、diffはexit-code 0で終了するはずです。

_...
chown ldap:ldap *

slapcat -l /var/tmp/test.ldif
diff /var/tmp/test.ldif /backup/openldap/backup_ldap2.diff
if [ $? != 0 ] ; then
     echo 'differences found'
fi

/etc/init.d/ldap start
_

もちろん、これはslapcatが正しく機能していることを前提としています。 youに関連するすべてのデータをldap_search_ext()を使用して実行中のDBから抽出する必要があると信頼できない場合は、いくつかの出力(そこからダンプまたはチェックサムを取得し、復元されたデータベースで同じコードを実行した場合と比較します(もちろんldapを開始した後)。こうすることで、slapcatによって、使用状況に関連する一部のデータがダンプから除外されているかどうかがわかります(可能性は低いですが、バグがある場合は可能です)。

4
Anthon