OpenLDAP - 備份及還原 BDB Database

前言

當 LDAP 上線服務前第一個要思考的問題當然就是災難復原了,預計讓系統每天凌晨自動備份 LDAP BDB (Berkeley DataBase),並透過 amd (automounter daemon) mount 方式將 LDAP BDB 備份資料寫入至備份伺服器中。請注意:以下 Script 只適合我的環境,若您取用請自行調整,恕不負損壞之責。

daily.local 達成如下需求

  • 系統會每天凌晨時自動執行 daily.local 內指定的 Script 內容 (正常情況為凌晨 3 ~ 4 點間)。

backup_bdb.sh 達成如下需求

  • 每天定期備份 LDAP BDB 資料庫。

備份 LDAP BDB 資料庫流程說明

  1. 先判斷備份 LDAP BDB 資料夾只留備份日期距離目前最新的 90 個資料夾。
  2. 停止 slapd 服務 (停止資料寫入)。
  3. 執行 db_checkpoint 確保資料都寫入 LDAP BDB 資料庫中。
  4. 複製所有資料庫檔案 (*.bdb) 至備份伺服器。
  5. 複製所有資料庫 Log(log.*) 至備份伺服器。
  6. 啟動 slapd 服務。

還原 LDAP BDB 資料庫流程說明

  1. 停止 slapd 服務 (停止資料寫入)。
  2. 將先前備份的(*.bdb,log.*******) 複製到 /var/db/openldap-data。
  3. 執行 db_recover 還原資料庫。
  4. 啟動 slapd 服務。


實作環境

  • FreeBSD 6.1-RELEASE-p12


Script 內容及如何備份還原 LDAP BDB 資料庫

daily.local 內容

將 backup_bdb.sh 路徑寫入 daily.local 中以便系統每天自動執行備份 LDAP BDB Script。
#cat /etc/daily.local
 #!/bin/sh
 /usr/local/sbin/backup_bdb.sh


backup_bdb.sh Script 內容 (備份 LDAP BDB 資料庫)

1. #!/bin/sh
2. # $Id: backup_bdb.sh,v 1.0 2006/10/03 14:25:26 weithenn Exp $
3. # Backup Berkeley DB Database Script
4. TODAY=`date +%Y%m%d`
5. DESTDIR="/host/backup/home/database/ldap/bdb"
6. KEEPN="90"
7. STARTLDAP="/usr/local/etc/rc.d/slapd start"
8. STOPLDAP="/usr/local/etc/rc.d/slapd stop"
9. SYNCBDB="/usr/local/bin/db43/db_checkpoint -1 -h /var/db/openldap-data"
10. CPBDB="cp -p /var/db/openldap-data/*.bdb"
11. CPLOG="cp -p /var/db/openldap-data/log.*"
12.
13. #Check Stale Directory
14. if [ -d ${DESTDIR} ]; then
15.       mkdir -p ${DESTDIR}/${TODAY};cd ${DESTDIR}/${TODAY}
16.       N=`ls -1|grep -e '[0-9]'|wc -l`
17.       if [ ${N} -gt ${KEEPN} ]; then
18.            echo "Removing Stale Backup BDB..."
19.            ls -1 | grep -e '[0-9]'|sort -nr|tail -`expr ${N} - ${KEEPN}` | xargs rm -r
20.            echo "Finished"
21.       fi
22.       echo "Stop Slapd Service"
23.       ${STOPLDAP}
24.       echo "Sync Data Write BDB"
25.       ${SYNCBDB}      
26.       echo "Backup BDB"
27.       ${CPBDB} ${DESTDIR}/${TODAY}
28.       echo "Backup BDB Log"
29.       ${CPLOG} ${DESTDIR}/${TODAY}
30.       echo "Start Slapd Service"
31.       ${STARTLDAP}      
32. fi
33. cd /;sync;sync;sunc




解說 backup_bdb.sh 內容:
4:執行日期指令(執行時建立的資料夾命名即為當天日期)。
5:指定屆時存放 LDAP BDB 資料夾路徑(透過 amd 方式 mount 備份伺服器)。
6:指定留存日期最新的 90 個資料夾(加上新備份的共會有 91 個資料夾)。
7:指定啟動 slapd 服務指令。
8:指定停止 slapd 服務指令。
9:指定 db_checkpoint 指令以確保所有資料都正確寫入資料庫中。
10:指定要複製的 LDAP 資料庫檔案(*.bdb)。
11:指定要複製的 LDAP 資料庫Log(log.*)。
14:判斷存放 LDAP BDB 資料夾是否存在(判斷第五行目錄是否存在)。
15:切換至 LDAP BDB 資料夾並建立一個以今天日期命名的資料夾。
17 ~ 21:只留日期最新的 91 個資料夾,其餘舊的資料夾都刪除。
22 ~ 31:備份 LDAP BDB 至備份伺服器後啟動 slapd 服務。


還原 LDAP BDB 資料庫

#/usr/local/etc/rc.d/slapd stop       //停止 slapd 服務(停止資料寫入)
將先前備份的(*.bdb,log.*******) 複製到 /var/db/openldap-data。
#db_recover-4.3 -h /var/db/openldap-data   //執行 db_recover 還原資料庫
#/usr/local/etc/rc.d/slapd start            //啟動 slapd 服務