Мой коллега случайно удалил файлы журнала транзакций ldap (из / var / lib / ldap) на нашем сервере ldap 2.4, работающем на centos. Теперь slapd deamon не запускается, при запуске с флагом отладки здесь говорится:
file id2entry.bdb has LSN 754/2932421, past end of log at 1/660
sept. 11 12:40:14 centos7.ent.univ slapd[4917]: bdb(dc=uit,dc=ac,dc=ma): BDB2507 Commonly caused by moving a database from one database environment
sept. 11 12:40:14 centos7.ent.univ slapd[4917]: bdb(dc=uit,dc=ac,dc=ma): BDB2508 to another without clearing the database LSNs, or by removing all of
sept. 11 12:40:14 centos7.ent.univ slapd[4917]: bdb(dc=uit,dc=ac,dc=ma): BDB2509 the log files from a database environment
Я попытался запустить утилиту db_recover, она говорит, что восстановление прошло успешно, но slapd еще не запускается, та же ошибка.
Точно зная, что удаление файлов журнала является виновником, и не имея файлов резервных копий, есть ли способ восстановить базу данных без файлов журнала?
После нескольких часов пробной версии отказ вот то, что сделало это:
-czf ldap.bak.gzip/var/lib/ldap/etc/openldap
db_dump-f file.dump file.bdb
комната-f file.bdb
db_load-f file.dump file.bdb
при столкновении с ошибкой при выполнении db_dump, выполненный:
db_recover-h/var/lib/ldap
, после того как Вы создали все bdb файлы из файлов дампа, удостоверяется, что они принадлежат правильному пользователю:
показанный ldap:ldap/var/lib/ldap /*
Попытка запустить ldap deamon:
сервис slapd запускается
, Вы могли бы попытаться выполнить другой db_recover, если он все еще не запустится, но если бы все bdb файлы были восстановлены успешно и имеют правильные полномочия, то deamon должен запуститься. В этой точке копируют все Ваши данные в ldif файл:
slapcat> ldap.bak.ldif
Используя клиент LDAP, попытайтесь управлять данными (добавьте, отредактируйте, удалите операции), если все в порядке затем хороший для Вас, в противном случае переустановите свой сервер LDAP и восстановите данные с помощью ldif, копируют Вас сделанный.
@Assil, благодаря вам я сэкономил много времени
Мои простые дополнения:
mkdir /tmp/slapd-dump
cd /var/lib/ldap
find -type f -name "*.bdb" -exec db_dump -f /tmp/slapd-dump/{} {} \
cd /tmp/slapd-dump
find -type f -name "*.bdb" -exec db_load -f {} /var/lib/ldap/{} \;
cd /var/lib/ldap
rm -rf log.*
db_recover
sudo -u ldap slapd
Убить slapd
Запустить slapd как службу
Для обычной очистки старых лог-файлов выполните:
db_archive -d -h /var/lib/ldap/