前言
當 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 資料夾只留備份日期距離目前最新的 90 個資料夾。
- 將 SLAPD database to LDIF utility。
- 匯出 LDAP Database 內容 LDIF 檔。
還原 LDAP LDIF 資料流程說明
- 停止 slapd 服務 (停止資料寫入)。
- 將先前備份的 LDIF 資料複製到本機下。
- 匯入 LDAP LDIF 檔。
- 啟動 slapd 服務。
實作環境
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 檔案】