LDAP database recovery

公司的一台 LDAP server (FreeBSD)傍晚時因為某些原因所以緊急重開,重開後發現 slapd 跑不起來。

# /usr/local/etc/rc.d/slapd start
/usr/local/etc/rc.d/slapd: WARNING: failed to start slapd

原本以為可能是 ram 出問題導致靈異,仔細一看又不太像。

用 -d 下去跑發現…

# /usr/local/libexec/slapd -u ldap -g ldap -d -1
...
...
(中間省略)
...
...
5228a6a1 bdb_db_open: database "dc=XXX,dc=com": dbenv_open(/var/db/openldap-data).
5228a6a1 bdb_db_open: database "dc=XXX,dc=com" cannot be opened, err 22. Restore from backup!
5228a6a1 ====> bdb_cache_release_all
5228a6a1 bdb(dc=XXX,dc=com): txn_checkpoint interface requires an environment configured for the transaction subsystem
5228a6a1 bdb_db_close: database "dc=XXX,dc=com": txn_checkpoint failed: Invalid argument (22).
5228a6a1 backend_startup_one (type=bdb, suffix="dc=XXX,dc=com"): bi_db_open failed! (22)
5228a6a1 slapd shutdown: initiated
5228a6a1 ====> bdb_cache_release_all
5228a6a1 bdb_db_close: database "dc=XXX,dc=com": alock_close failed
5228a6a1 slapd destroy: freeing system resources.
5228a6a1 slapd stopped.

看起來就是 ldap db 爛了…

用 db_recover 來試著修修看(不同版本 bdb 的 db_recover 代不同版號),修的好就沒問題,修不好就得從備份撈

# /usr/local/bin/db_recover-4.6 -v -h /var/db/openldap-data/
Finding last valid log LSN: file: 1 offset 4541603
Recovery starting from [1][4541458]
Recovery complete at Thu Sep  5 23:48:00 2013
Maximum transaction ID 800000ec Recovery checkpoint [1][4541603]

然後再跑一次 slapd

# /usr/local/etc/rc.d/slapd start
Starting slapd.

就跑起來啦~~

本篇發表於 Computer, FreeBSD, Linux, Software, Sundries 並標籤為 , , 。將永久鏈結加入書籤。

發表迴響