前言
當 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 資料庫流程說明
- 先判斷備份 LDAP BDB 資料夾只留備份日期距離目前最新的 90 個資料夾。
- 停止 slapd 服務 (停止資料寫入)。
- 執行 db_checkpoint 確保資料都寫入 LDAP BDB 資料庫中。
- 複製所有資料庫檔案 (*.bdb) 至備份伺服器。
- 複製所有資料庫 Log(log.*) 至備份伺服器。
- 啟動 slapd 服務。
還原 LDAP BDB 資料庫流程說明
- 停止 slapd 服務 (停止資料寫入)。
- 將先前備份的(*.bdb,log.*******) 複製到 /var/db/openldap-data。
- 執行 db_recover 還原資料庫。
- 啟動 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 服務