Méthode de sauvegarde des données de l’annuaire
Cette section va présenter différentes méthodes de sauvegarde utilisables pour les annuaires OpenLDAP. Toutes ces méthodes peuvent être automatisées sur les systèmes d’exploitation Linux par l’intermédiaire du service "crond".
1. Sauvegarde hors-ligne au niveau des répertoires du système de fichiers
Afin de sauvegarder entièrement un annuaire OpenLDAP, il est possible d’envisager de copier les répertoires identifiés précédemment.
Pour ce faire, il faut obligatoirement stopper le service "slapd" pour ensuite être en mesure d’archiver les répertoires de l’annuaire via la commande tar sur un système Linux :
service slapd stop 
tar -cvf /backup/openldap/data-openldap.tar /var/lib/ldap
Cette méthode est efficace, mais n’est pas recommandée dans des environnements de production ultra-sollicités. En effet, selon la fréquence à laquelle cette sauvegarde est effectuée, le risque de perdre des informations peut devenir important et rendre l’annuaire incohérent. Par exemple, si cette opération de sauvegarde est réalisée tous les samedis, alors une restauration de l’annuaire effectué le mercredi avec les données de sauvegarde du dernier samedi ferait perdre quatre jours de données (ajout, suppression et modification d’entrées).
2. Sauvegarde hors-ligne au niveau de la base de données
Cette méthode concernera uniquement la sauvegarde des données de l’annuaire.
Elle consiste à utiliser les techniques de sauvegarde des bases de données transactionnelles qui conservent chacune de leurs transactions réussies (c’est-à-dire qui ont été appliquées à l’annuaire) dans des fichiers journaux. Ainsi, la sauvegarde des données de la base à un instant "T" et celle des fichiers journaux contenant les transactions effectuées jusque-là permettent de restaurer l’annuaire dans un état quasi identique à celui qu’il avait avant l’incident.
¬
Les fichiers journaux contenant les transactions peuvent devenir considérables et doivent donc être supprimés au fur et à mesure. On parle alors de rotation des "fichiers de log". Il faut cependant faire attention de ne pas supprimer un de ces fichiers apparus après une sauvegarde de la base. En effet, il serait alors impossible de "rejouer" l’intégralité des transactions survenues après la sauvegarde et ainsi d’obtenir un annuaire incohérent.
Il faudra commencer par réaliser la méthode de sauvegarde ci-dessous :
Dans le cas d’un annuaire OpenLDAP qui utilise dans 99 % des cas une base de données de type "bdb", la procédure de sauvegarde suivante peut être réalisée :
1.	Stopper le service LDAP (démon "slapd").	
service slapd stop
2.	Forcer un contrôle des fichiers journaux contenant les transactions réussies avec la commande db_checkpoint.	
[root@ldap01 ldap]# which db_checkpoint 
/usr/bin/db_checkpoint 
[root@ldap01 ldap]# rpm -qf /usr/bin/db_checkpoint 
db4-utils-4.7.25-18.el6_4.x86_64 
[root@ldap01 example]# pwd 
/var/lib/ldap 
[root@ldap01 ldap]# /usr/bin/db_checkpoint -1 -h /var/lib/ldap -v 
db_checkpoint: checkpoint begin: Mon Jul  3 07:16:55 2017 
 
db_checkpoint: checkpoint complete: Mon Jul  3 07:16:55 2017 
[root@ldap01 ldap]# ls -lrt 
total 11292 
-rw-------. 1 ldap ldap     8192 May  9 08:06 ou.bdb 
-rw-r--r--. 1 ldap ldap     4096 Jul  3 01:35 alock 
-rw-------. 1 ldap ldap   753664 Jul  3 04:11 __db.005 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 uidNumber.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 uid.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 objectClass.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 loginShell.bdb 
-rw-------. 1 ldap ldap    32768 Jul  3 07:13 id2entry.bdb 
rw-------. 1 ldap ldap     8192 Jul  3 07:13 gidNumber.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 entryUUID.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 entryCSN.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 dn2id.bdb 
-rw-------. 1 ldap ldap     8192 Jul  3 07:13 cn.bdb 
-rw-------. 1 ldap ldap    24576 Jul  3 07:16 __db.001 
-rw-------. 1 ldap ldap   188416 Jul  3 07:16 __db.002 
-rw-------. 1 ldap ldap 10485760 Jul  3 07:16 log.0000000001 
-rw-------. 1 ldap ldap    98304 Jul  3 07:16 __db.004 
-rw-------. 1 ldap ldap   270336 Jul  3 07:16 __db.003 
-rw-------. 1 ldap ldap    32768 Jul  3 07:16 __db.006
3.	Lister les fichiers de la base de données qui doivent être archivés/sauvegardés afin de récupérer la totalité de la base de données en cas de panne ou de corruption des données.	
 [root@ldap01 ldap]# db_archive -s -h /var/lib/ldap 
cn.bdb 
dn2id.bdb 
entryCSN.bdb 
entryUUID.bdb 
gidNumber.bdb 
id2entry.bdb 
loginShell.bdb 
objectClass.bdb 
ou.bdb 
uid.bdb 
uidNumber.bdb 
[root@ldap01 ldap]# 
4.	Sauvegarder tous les fichiers de la base de données et les placer dans un répertoire distinct.	
[root@ldap01 ldap]# mkdir /databackup 
[root@ldap01 ldap]# pwd 
/var/lib/ldap 
[root@ldap01 ldap]# cp *db.00* /databackup 
[root@ldap01 ldap]# cp *.bdb /databackup 
[root@ldap01 ldap]#
5.	Puis lister et sauvegarder les fichiers journaux.	
 [root@ldap01 ldap]# mkdir /logbackup 
[root@ldap01 ldap]# db_archive -l -h /var/lib/ldap 
log.0000000001 
[root@ldap01 ldap]# cp log.0000000001 /logbackup 
[root@ldap01 ldap]#
6.	Ensuite, il faudra relancer le service LDAP.	
service slapd start
7.	Et désormais, seule une sauvegarde quotidienne (ou encore plus rapproché) du ou des fichiers journaux doit être réalisée, ce qui permettra de restaurer les données de l’annuaire au plus près de leurs versions au moment du crash.	
3. Sauvegarde en ligne au format LDIF
Il est aussi possible d’effectuer une sauvegarde à chaud des données de l’annuaire dans un format LDIF et dans ce cas, nul besoin de stopper le service "slapd".
Pour ce faire, il faut utiliser le programme "slapcat" fourni par le package openldap-server.
¬
L’utilisation de la commande slapcat est seulement possible pour des bases de données de type "hdb" ou "dbd".
Exemple
[root@ldap01 tmp]# slapcat -b "dc=exemple,dc=com" -l /tmp/ldap-bkp.ldif 
59061186 bdb_db_open: warning - no DB_CONFIG file found in  
directory /var/lib/ldap: (2). 
Expect poor performance for suffix "dc=exemple,dc=com". 
59061186 bdb_monitor_db_open: monitoring disabled; configure  
monitor database to enable 
[root@ldap01 tmp]#
Voici un extrait du fichier de sauvegarde obtenu :
[root@ldap01 tmp]# cat /tmp/ldap-bkp.ldif 
dn: dc=exemple,dc=com 
dc: exemple 
objectClass: top 
objectClass: domain 
structuralObjectClass: domain 
entryUUID: d27edbaa-ba28-1036-972b-b3e12a9f067e 
creatorsName: cn=root,dc=exemple,dc=com 
createTimestamp: 20170420152151Z 
entryCSN: 20170420152151.035515Z#000000#000#000000 
modifiersName: cn=root,dc=exemple,dc=com 
modifyTimestamp: 20170420152151Z 
 
. . .