OpenLDAP - 匯出及匯入 LDIF 檔

前言

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

daily.local 達成如下需求

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

backup_ldif.sh 達成如下需求

  • 每天定期備份 LDAP LDIF 資料。

備份 LDAP LDIF 資料流程說明

  1. 先判斷備份 LDAP LDIF 資料夾只留備份日期距離目前最新的 90 個資料夾。
  2. 將 SLAPD database to LDIF utility。
  3. 匯出 LDAP Database 內容 LDIF 檔。

還原 LDAP LDIF 資料流程說明

  1. 停止 slapd 服務 (停止資料寫入)。
  2. 將先前備份的 LDIF 資料複製到本機下。
  3. 匯入 LDAP LDIF 檔。
  4. 啟動 slapd 服務。


實作環境

  • FreeBSD 6.1-RELEASE-p12


Script 內容及如何匯出匯入 LDAP LDIF 資料檔

daily.local 內容

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



backup_ldif.sh 內容 (匯入 LDAP LDIF 資料檔)

1. #!/bin/sh
2. # $Id: backup_ldif.sh,v 1.0 2006/10/03 14:25:26 weithenn Exp $
3. # Backup LDAP LDIF Script
4. TODAY=`date +%Y%m%d`
5. DESTDIR="/host/backup/home/database/ldap/ldif"
6. KEEPN="90"
7. BKLDIF="/usr/local/sbin/slapcat -f /usr/local/etc/openldap/slapd.conf -l"
8.
9. #Check KEEP Directory
10. if [ -d ${DESTDIR} ]; then
11.       cd ${DESTDIR}
12.       N=`ls -1|grep -e '[0-9]'|wc -l`
13.       if [ ${N} -gt ${KEEPN} ]; then
14.            echo "Removing Stale Backup LDIF..."
15.            ls -1 | grep -e '[0-9]'|sort -nr|tail -`expr ${N} - ${KEEPN}` | xargs rm -r
16.            echo "Finished"
17.       fi
18.       echo "Backup LDIF..."
19.       cd ${DESTDIR} ; ${BKLDIF} ${TODAY}.ldif
20. fi
21.
22. cd /
23. sync;sync;sync



解說 backup_ldif.sh 內容:

  • 4:執行日期指令(執行時建立的資料夾命名即為當天日期)。
  • 5:指定屆時存放 LDAP LDIF 檔資料夾(透過 amd 方式 mount 備份伺服器)。
  • 6:指定留存日期最新的 90 個資料夾(加上新備份的共會有 91 個資料夾)。
  • 7:指定將 SLAPD database to LDIF utility。
  • 10:判斷存放 LDAP LDIF 檔資料夾是否存在(判斷第 5 行目錄是否存在)。
  • 11:切換至 LDAP LDIF 檔資料夾。
  • 12 ~ 17:只留日期最新的 91 個資料夾,其餘舊的資料夾都刪除。
  • 19:匯出 LDAP Database 內容 LDIF 檔。


匯入 LDAP LDIF 資料檔

slapadd -f /usr/local/etc/openldap/slapd.conf -l 【指定要還原的 ldif 檔案】