TonyChyi

我在那一角落患过抽风

OpenLDAP的备份与灾难恢复(Berkeley DB篇)
2015年12月08日
 

 

好吧,只有这一篇。

OpenLDAP一般使用Berkeley DB作为数据存储。

LDAP有自己的数据导出工具,但很可惜,并不是所有的数据都能被导出,作为备份自然是不靠谱。

另外,如果因为各种原因(故障、熊孩子、软件问题),使得slapd无法启动的话,备份与恢复就成了一个让人哭的问题了。

备份

幸好,Berkeley DB有一个不算是神器的神器:db_dump

#!/bin/sh

DIR=/var/lib/ldap
TMPDIR=/tmp
BAKDIR=bdbbak

# 在正式备份前,强制归档
db_checkpoint -1 -h $DIR
db_archive -d -h $DIR

mkdir -p $TMPDIR/$BAKDIR

cd $DIR
for i in $(ls *.bdb)
do
	db_dump $i > $TMPDIR/$BAKDIR/$i.bak
done

cd $TMPDIR
tar cjvf $BAKDIR-$(date "+%Y%m%d%H%M%S").tar.bz2 $BAKDIR

上面是一个自动备份的脚本,使用db_dump直接将数据输出到stdout(至少数据还算是会好的吧,如果在不出故障的情况下),而且是以文本形式输出的。

恢复

好吧,虽然Berkeley DB自带db_recover,但也有搞不定的时候,如果用db_recover -c还是恢复不了怎么办?

这个时候,db_dumpdb_load也许会有用。

使用方法如下:

# OpenLDAP可能会有的数据文件:
# cn.bdb  dn2id.bdb  entryCSN.bdb  entryUUID.bdb  givenName.bdb  id2entry.bdb  mail.bdb  objectClass.bdb  ou.bdb  sn.bdb  uid.bdb
db_load data.bdb < data.dbd.bak  # bak文件是用db_dump导出的

在恢复前,最好是清空/var/lib/ldap下的文件,包括日志(这玩意我就不说了,比数据本身还大),然后使用上面的命令恢复数据。运气好的话,会没事的。

Tags: #OpenLDAP

 

TonyChyi © 2020 GPLv2