这是一个创建于 4677 天前的主题,其中的信息可能已经有所发展或是发生改变。
邮件服务器突然连接不上,看了下发现 slapd 进程占用了99%的CPU,于是想都没想就直接reboot了(已经运行好久没关过机了)
然后重启后发现客户端无法登陆服务器,一直重复要求输入账号密码,看了下启动过程,发现是ldap没启动成功
最后查看了下启动脚本,发现是检查配置文件时,缺少了
/var/lib/ldap/id2entry.dbb
/var/lib/ldap/id2entry.gdbm
这2个文件
/var/lib/ldap/id2entry.bdb文件倒是还在
没碰到过这问题,不知道有没有办法恢复这2个文件。
尝试修改启动脚本跳过配置文件检查,但是启动了也没用...依然是无法登录邮件服务器...
第 1 条附言 · 2013 年 6 月 15 日
...第一次接触openldap...原来不是丢失这2个文件啊...
这3个文件作用是一样的,只要存在一个就行了
应该是因为刚在slapd占用99%CPU的时候直接给它重启导致数据丢失了,后来google了下,使用如下方法即可还原数据
cd /var/lib/ldap
ls -la
drwxr-xr-x 2 ldap ldap 4.0K Jun 15 16:40 .
drwxr-xr-x 4 root root 4.0K Jun 15 16:42 ..
-rw-r--r-- 1 ldap ldap 4.0K Jun 15 16:40 alock
-rw------- 1 ldap ldap 24K Jun 15 16:40 cn.bdb
-rw------- 1 ldap ldap 24K Jun 15 16:40 __db.001
-rw------- 1 ldap ldap 360K Jun 15 16:40 __db.002
-rw------- 1 ldap ldap 264K Jun 15 16:40 __db.003
-rw------- 1 ldap ldap 96K Jun 15 16:40 __db.004
-rw------- 1 ldap ldap 544K Jun 15 16:40 __db.005
-rw------- 1 ldap ldap 24K Jun 15 16:40 __db.006
-rw------- 1 ldap ldap 32K Jun 15 16:40 dn2id.bdb
-rw------- 1 ldap ldap 128K Jun 15 16:40 id2entry.bdb
-rw------- 1 ldap ldap 10M Jun 15 16:40 log.0000000001
-rw------- 1 ldap ldap 60K Jun 15 16:40 mail.bdb
-rw------- 1 ldap ldap 8.0K Jun 15 16:40 objectClass.bdb
-rw-r--r-- 1 ldap ldap 37 Jun 15 16:40 openldap-severs-update.log
-rw------- 1 ldap ldap 24K Jun 15 16:40 uid.bdb
# 保险起见还是备份一下旧数据,我第一次捣鼓的时候还原了几次都不成功,好在之前有备份
mkdir -p /home/xxx/ldap_bak
cp /var/lib/ldap/* /home/xxx/ldap_bak
# 确保ldap已经停止
/etc/init.d/ldap stop
# 早期版本可能是 db_recover
slapd_db_recover
ls -al
drwxr-xr-x 2 ldap ldap 4.0K Jun 15 16:40 .
drwxr-xr-x 4 root root 4.0K Jun 15 16:42 ..
-rw-r--r-- 1 ldap ldap 4.0K Jun 15 16:40 alock
-rw------- 1 ldap ldap 24K Jun 15 16:40 cn.bdb
-rw------- 1 ldap ldap 32K Jun 15 16:40 dn2id.bdb
-rw------- 1 ldap ldap 128K Jun 15 16:40 id2entry.bdb
-rw------- 1 ldap ldap 10M Jun 15 16:42 log.0000000001
-rw------- 1 ldap ldap 60K Jun 15 16:40 mail.bdb
-rw------- 1 ldap ldap 8.0K Jun 15 16:40 objectClass.bdb
-rw-r--r-- 1 ldap ldap 37 Jun 15 16:40 openldap-severs-update.log
-rw------- 1 ldap ldap 24K Jun 15 16:40 uid.bdb
/etc/init.d/ldap start
还原成功...看到有其他人是直接把__db.0*文件都移动到别的地方就还原成功了,我尝试过不行,后来用上面的方法还原成功
第 2 条附言 · 2013 年 6 月 15 日
忘了...运行
slapd_db_recover
前要先把DB_CONFIG文件给还原...
可以通过搜索
find / -name "*DB_CONFIG*"
来查找这个配置文件的示例,然后复制一份过来就行了
所以完整的还原过程应该是
cd /var/lib/ldap
mkdir -p /home/xxx/ldap_bak
cp /var/lib/ldap/* /home/xxx/ldap_bak
/etc/init.d/ldap stop
cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap/
slapd_db_recover
/etc/init.d/ldap start