OpenLDAP: резервное копирование и восстановление – утилиты slapcat / slapadd и ldapsearch / ldapadd

Автор: | 26/02/2014
 

ldap-logoДля создания резервной копии базы в LDIF-файл имеются два основных инструмента – slapcat/slapadd, работающий напрямую с базой данных, и – ldapsearch/ldapadd, работающие через LDAP-сессии (см. RFC 4511).

По сути, и slapcat и slapadd являются просто симлинками на сам slapd:

# which slapcat
/usr/sbin/slapcat
# file /usr/sbin/slapcat
/usr/sbin/slapcat: symbolic link to `slapd'
# which slapadd
/usr/sbin/slapadd
# file /usr/sbin/slapadd
/usr/sbin/slapadd: symbolic link to `slapd'

Тогда как ldapsearch/ldapadd – внешние утилиты, при этом ldapadd – ссылка на утилиту ldapmodify, котоаря азпускается с ключём -a (Add new entries):

# which ldapsearch
/usr/bin/ldapsearch
# file /usr/bin/ldapsearch
/usr/bin/ldapsearch: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
# which ldapadd
/usr/bin/ldapadd
# file /usr/bin/ldapadd
/usr/bin/ldapadd: symbolic link to `ldapmodify'

slapcat/ldapsearch утилиты имеют некоторые различия, хотя оба предоставляют информацию в формате LDIF (LDAP Data Interchange Format – см. RFC 2849)

Содержание

slapcat/slapadd

ldapsearch/ldapadd

предоставляет все атрибуты (пользовательские и операционные); по умолчанию предоставляет только пользовательские атрибуты;
сортирует данные в файле вывода в порядке выборки из БД; сортирует данные соответственно структуре каталога;
требует остановки работы сервера (кроме случаев использования баз BDB/HDB, slapdd – требуется остановки в любом случае ); не требует остановки сервера;
для восстановления из файла ldif требует утилиту slapadd; для восстановления из файла ldif требует утилиту ldapadd;
не требует указания данных доступа к LDAP-серверу; требует указания данных доступа к LDAP-серверу (если другое не указано в конфигурации сервера);
т.к. slapcat работает напрямую с базой – на него не распространяются ограничения sizeLimit и т.п.; т.к. ldapsearch работает через LDAP-сессии, а именно – LDAP-операцию search, на его запросы накладываются ограничения (limits), такие как sizeLimit.

Это – основные различия в этих инструментах.

Перейдём к примерам выполнения бекапа / восстановления базы.

Найдём имеющиеся DIT (Directory Information Tree, так же – namingContexts):

$ ldapsearch -x -b '' -s base '(&)' namingContexts -LLL
dn:
namingContexts: dc=db_1
namingContexts: dc=db_2

Создание резервной копии базы LDAP с использованием утилиты slapcat:

$ slapcat -f /etc/openldap/slapd.conf -b "dc=db_1" -l db_1.ldif

Используемые ключи:

-f – необязательный параметр, указание файла конфигурации (ключ -F в случае использования cn=condig);
-bnamingContext, или DIT, для которого необходимо выполнить операцию;
-l – файл, в который будет выполнено копирование данных.

Другие ключи:

-nN – указание порядкового номера DIT, для которого необходимо выполнить операцию, при этом база cn=config всегда имеет -n 0, остальные – в порядке перечисления их в конфигурации;
-a filter – выполнение операции только для записей, попадающих под заданный фильтр;
-c – игнорировать сообщения об ошибках копирования;
-d - debug-level (см. loglevel или русский перевод тут>>>);
-v - verbose, включить подробный режим выполнения.

Содержимое полученного файла будет выглядеть примерно так:

$ cat db_1_backup.ldif
dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_modified
structuralObjectClass: organization
entryUUID: fff0638c-2f3f-1033-9e36-f1c476873c78
creatorsName: cn=root,dc=db_1
createTimestamp: 20140221123241Z
entryCSN: 20140221123241.063251Z#000000#000#000000
modifiersName: cn=root,dc=db_1
modifyTimestamp: 20140221123241Z

Перед использованием slapadd – останавливаем сервер:

# service slapd stop
Stopping slapd:                                            [  OK  ]

Теперь – удалим имеющиеся файлы базы db_1, кроме файла DB_CONFIG:

# cd /var/lib/ldap/db_1/
# ls -1 | grep -v "^DB_CONFIG" | xargs rm -r

Выполняем slapadd, с помощью ключа -l указываем файл, из которого необходимо восстановить данные:

$ slapadd -l db_1_backup.ldif
bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...

Запускаем сервер:

# service slapd start
Starting slapd:                                            [  OK  ]

С помощью ldapsearch проверяем нашу базу:

$ ldapsearch -D "cn=root,dc=db_1" -wMyS -b "dc=db_1" "dc=db_1" -LL
version: 1

dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_modified

База восстановлена до первоначального состояния.

Теперь – выполним резервное копирование с помощью утилиты ldapsearch и перенаправим стандартный поток вывода утилите tee, которая запишет его в файл db_1_backup2.ldif:

$ ldapsearch -D "cn=root,dc=db_1" -wMyS -b "dc=db_1" -LLL > db_1_backup2.ldif
dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_modified

Тут ключи:

-D – пользователь, от имени которого выполняется запрос;
-w – пароль (используйте -W, что бы не указывать его явно в строке запроса, будет выдано приглашение на ввод пароля);
-bDIT, в котором выполнять поиск;
-L (-LL, -LLL) – формат выводимой информации (-L - LDIFv1, -LL – отключить вывод комментариев, -LLL – отключение отображения версии LDIF).

Удаляем информацию из DIT:

$ ldapdelete -v -D "cn=root,dc=db_1" -W -r "dc=db_1"
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
deleting entry "dc=db_1"

Тут ключ -r для рекурсивного удаления всех записей.

Выполняем ldapadd из созданного файла:

$ ldapadd -x -D "cn=root,dc=db_1" -W -f db_1_backup2.ldif -v
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
add objectClass:
dcObject
organization
top
add dc:
db_1
add o:
db_modified
adding new entry "dc=db_1"
modify complete

Проверяем:

$ ldapsearch -D "cn=root,dc=db_1" -wMyS -b "dc=db_1" "dc=db_1" -LL
version: 1

dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_modified

Данные в базе восстановлены.

Ссылки по теме:

http://pro-ldap.ru
http://www.openldap.org
https://access.redhat.com
http://karellen.blogspot.com
http://supportex.net