站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

OpenLDAP-備份及還原 BDB 資料庫

最後編輯

修改:

< == Script 內容及如何還原 LDAP BDB 資料庫==

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

修改:

< === backup_bdb.sh 內容 ===

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


前言

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

daily.local 達成如下需求

backup_bdb.sh 達成如下需求

備份 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 內容 (備份 LDAP BDB 資料庫)

backup_bdb.sh Script 內容如下

 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 服務

參考

[FreeBSD Hypertext Man Pages slapcat]

[ FreeBSD Hypertext Man Pages mmencode]

[MyUnix論壇 :: 觀看文章 - OpenLDAP的userPassword編碼問題]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com