:::

Blogger最新文章與最新回應產生器(jQuery版)

布丁布丁吃布丁

Blogger最新文章與最新回應產生器(jQuery版)

  • 最新文章程式產生器
    Blogger網址http://.blogspot.com 必填!舊版的Blogger無效喔。
    顯示篇數要顯示最新文章數目
    標題長度限制如果是空白,表示不限制
    顯示方式%title%(標題)、%Y%(西元年份)、%M%(月份)、%D%(日期)、%authorname%(作者名稱),可視需要改變排列或是刪掉參數,或加入HTML語法
    標籤可限制只顯示特定標籤的最新文章,空白表示顯示所有標籤的最新文章。
    聯播程式碼: (程式碼擺設的位置)
  • 最新回應程式產生器
    Blogger網址http://.blogspot.com 必填!舊版的Blogger無效喔。
    顯示篇數要顯示最新回應數目
    留言長度限制如果是空白,表示不限制
    顯示方式%comment%(留言)、%Y%(西元年份)、%M%(月份)、%D%(日期)、%authorname%(作者名稱),可視需要改變排列或是刪掉參數,或加入HTML語法
    網站提供 (Feeds Type) 要搭配自己部落格的設定(位置圖),預設是Full(完整)。
    聯播程式碼: (程式碼擺設的位置)

這篇是改進以前我寫的「Blogger專用最新文章與最新回應產生器」,以物件的方式重寫了一遍,並且改進了留言時常因為HTML標籤而爆掉的錯誤。

這次程式碼很簡短,因為大部分的程式碼我都改用引用的方式,可以確保不會因為意外事故讓人裝不上去。此外這次的程式碼也很好懂,應該直接看就知道要做什麼了,如果使用者以後要修改的話就不用回來這邊重新產生,只要修改參數設定就好了。

原始的寫法是參考從堯@部落格來的,各別是Blogger聯播程式產生器(PartII)Blogger最新回應程式產生器(5/27更新),請也支持一下原作者吧。

  • 2011/4/1: 補充,您的Blogger讀取權限必須設定為「任何人」才能使用此功能。
  • 2012/12/21: 修正文章連結會抓到RSS網址的錯誤。因為程式檔案改位置了,所以請重新產生程式碼再安裝一次,這樣才會有效果喔。
(more...)

全文搜尋引擎Lucene簡介投影片

全文搜尋引擎Lucene簡介投影片

image

Lucene是一個全文搜尋引擎的套件,他可以為各種文件製作倒置索引檔(Inverted File),並透過簡單的API來檢索。DSpace的搜尋功能也是透過Lucene來實做,一時興起就去研究看看到底是怎麼回事了。

(Google Docs新開視窗SkyDrive投影片下載)

原本是抱著會對論文有幫助的心態去研究,不過實際上好像用不太到。我還是乖乖地來學習物件導向程式設計還比較實在就是。

參考資源

以下是一些可供參考的網站:

image實際上我是閱讀書本「征服Ajax+Lucene建構搜尋引擎」:

  • 征服Ajax+Lucene建構搜尋引擎(附光碟)
  • 作者:李剛、宋傳、邱哲
  • 出版社:松崗
  • 出版日期:2006年11月07日
  • 語言:繁體中文
  • ISBN:9861258566
  • 定價:490元

之前是在光華大享書局以特價書150元的價格買下來,好像覺得很值得。內文介紹其實不是說寫得很好,他也只是把中國大陸簡體字翻譯成繁體字之後出版而已,很多地方都是把他當作簡體字來看待比較好。

(more...)

Blogger側邊欄開關小工具

布丁布丁吃布丁

Blogger側邊欄開關小工具

image

看來的確有人注意到我的Blogger右上角有個「Sidebar」控制的功能,這可以控制右邊側邊欄的大小,搭配jQuery的動畫效果,呈現的效果其實還蠻有趣的。(只是在IE6中動畫效果並不明顯)

由於網友Gooda的詢問,我特別把這功能獨立出來並改寫成較容易操作的方式,分享給各位Blogger的玩家使用。

程式碼下載

下面的快速安裝當中是使用了我架在Google Page Creator的程式,如果你需要的話,歡迎大家自行下載、修改並使用。


安裝方法

Step.1 進入Blogger管理介面的「版面配置」,點選下方的「新增小工具」

image 

Step.2 新增「HTML/JavaScript」

image

按下右上角的「+」就可以進入編輯畫面。

Step.3 在內容新增程式碼

image

程式碼的內文如下:

<script src="http://puddingchen.35.googlepages.com/jquery.js" type="text/javascript"> </script>
<script type="text/javascript">
jQuery.getScript("http://puddingchen.35.googlepages.com/puliBloggerSidebarControl.js", function () {
	pBS = puliBloggerSidebar();
	pBS.styleController = "cursor:default;float:right;font-size: 10pt;font-weight:normal;margin-right:1em;margin-top:15px;";	//定義控制按鈕的格式
	pBS.styleA = "font-weight:blog;";	//定義左右按鈕的格式
	pBS.textLeft = " &lt; Side";	//定義左文字的內容
	pBS.textCenter = "";	//定義中間文字的內容
	pBS.textRight = "bar &gt; ";	//定義右文字的內容
	pBS.setup();
});
</script>

如果你之前已經引用了jQuery,那麼你可以省略掉第一行的「<script src="http://puddingchen.35.googlepages.com/jquery.js" type="text/javascript"> </script> 」部份。

注意到裡面有些屬性設定,包括CSS與內文的部份。如果你對於呈現出來的導覽列控制按鈕的樣式不太滿意,稍後你可以回來修改這邊屬性的內容。

標題留空無所謂,完成之後按下右下角的「儲存」。

Step.4 看看你的網誌,「< Sidebar >」應該已經出來囉!

image

點點看能不能順利運作吧!

(more...)

製作DSpace的鏡像伺服器(Mirror Server)

布丁布丁吃布丁

製作DSpace的鏡像伺服器(Mirror Server)

當一台伺服器出問題掛點的時候,為了避免服務中斷,我們總是會準備另一台鏡像的伺服器來接手,好讓網路服務能夠持續不斷地進行。

儘管DSpace這種機構典藏系統通常不會需要這麼完全不中斷的高等級服務,不過對於我們這種全國性的教育部計畫來說,總是想要越做越好。因此終於把DSpace的鏡像伺服器功能完成了!

鏡像伺服器說明

鏡像的目的在於建立出另一台一模一樣的伺服器環境、一模一樣的資料,但是卻是獨立運作的個別伺服器。我把主要提供服務的伺服器稱為「Master Server」,而備用作為鏡像的伺服器稱為「Slave Server」。以下不論是在圖解說明還是在程式設定裡面,提到Master(或簡稱M)、Slave(或簡稱S)都是在指這兩種伺服器。

Master Server與Slave Server所提供的服務基本上必須相同,也就是同樣的DSpace系統。但他們之間有兩個差別:

  • 網路設定不一樣:例如Master Server的IP可能是192.168.1.21,而Slave Server則可能是192.168.1.22。當然,現在的網路環境中不可能有兩個同時一樣的IP,但是他們都必需要有固定的IP位置才能進行檔案資料的傳送。
  • 排程功能不一樣:Master Server負責程式的備份,Slave Server則負責把資料從Master Server抓過來,然後利用備份的資料來作還原成Master Server的資料環境。

值得一提的是,因為執行鏡像同步之後,原本被同步的伺服器資料將會消失。例如將Master Server的資料鏡像同步到Slave Server的時候,Slave Server原有的DSpace系統、PostgreSQL資料庫中的資料將會被覆蓋。因此Slave Server將會是很好的測試環境!

鏡像功能說明

鏡像功能當中有7支程式(下載http://0rz.tw/swNWn),其中最後5支是控制鏡像動作的各個功能。程式功能概述如下:

  • config.php:設定檔,主要需要設定Master Server跟Slave Server的網路設定。
  • function.php:執行函式庫,大部分的動作都在這個函式庫當中執行。
  • initiate-slave.php:建置Slave Server的環境。
  • rsync-slave2master.php:檔案鏡像同步,從slave到master。
  • rsync-master2slave.php:檔案鏡像同步,從master到slave。
  • network-master2slave.php:修改網路設定,從master到slave。
  • network-slave2master.php:修改網路設定,從slave到master。

後面五支程式可以用「php rsync-master2slave.php」這樣的指令來執行。接下來我們一邊建置鏡像伺服器的環境,一邊說明這些程式的功用吧。

Step1. 設定config.php

請先把DSpace鏡像程式下載到本機端,然後修改設定檔config.php,以便之後的步驟中可以上傳到伺服器裡。

設定檔內容很多,大部分我都有撰寫註解以說明。最重要的是要設定Master Server與Slave Server的網路設定,而這些參數就在檔案開頭,如下:

//鏡像主要伺服器與備份伺服器
$rsyncConfig["serverMaster"]="192.168.1.21";	//Master Server的IP
$rsyncConfig["serverMasterDN"]=$rsyncConfig["serverMaster"];	//Master Server的Domain Name
$rsyncConfig["serverSlave"]="192.168.1.22";	//Slave Server的IP
$rsyncConfig["serverSlaveDN"]=$rsyncConfig["serverSlave"];	//Slave Server的Domain Name

請依照Master Server與Slave Server實際的網路位置去做設定吧。

Step2. 配置Master Server

在config.php預設設定裡面:

最後,把上述7支鏡像功能程式上傳到「/root/rsync」吧。

請完成以上工作之後,才能開始準備進行鏡像。如果你系統安裝位置與上述路徑不同,則請修改config.php檔案,程式內皆有註解說明,應該很好懂才是。

Step3. 安裝Slave Server

請安裝與Master Server同樣的作業系統,如果你跟著我之前寫的「DSpace 1.5.1安裝法」來作的話,那麼你需要注意以下幾點:

  • 作業系統是CentOS 5.2。
  • 需要額外安裝PostgreSQL跟Apache PHP環境。
  • 需要額外開啟8080 port。
  • 需要額外建立名為「dspace」的帳號。

安裝完成之後,一樣把上述7支鏡像功能程式上傳到「/root/rsync」吧。接下來DSpace的伺服器環境、資料,都交由鏡像程式來幫你執行!

Step4. 配置Slave Server伺服器環境

image

概念如上圖,我們從Master取得伺服器環境所的軟體,並執行安裝。所使用的程式是「initiate-slave.php」。你需要在Slave Server中執行這支程式(為了避免網路放置過久斷線,強烈建議在Slave Server本機端執行):

[root@dspace2 ~]# php /root/rsync/initiate-slave.php

第一次執行,程式會提示你製作並安裝SSH公鑰與私鑰,你需要依照程式的提示到Master Server去安裝可以登入的公鑰(詳細可以參考鳥哥的說明)。只有安裝SSH公鑰與私鑰之後,Slave Server才能順利從Master Server取得資料,而不需要每次都詢問密碼。要注意的是,當Master Server要像Slave Server取得資料的時候,依然需要詢問密碼的,除非你手動新增了公鑰。

第二次執行,程式會開始安裝各個DSpace所需要的軟體,並且修改設定成為適合運作DSpace的環境,同時安裝自動鏡像的排程。如果順利安裝完成的話,接著就可以來作鏡像取得資料了。

Step5. 手動從Master Server取得資料到Slave Server

image

接著一樣在Slave Server本機端中執行這支程式:

[root@dspace2 ~]# php /root/rsync/rsync-master2slave.php

程式就會自動從Master Server取得資料,然後再將部份設定檔修改成Slave Server所在的網路設定,以讓他可以順利運作。

這隻程式在Step4的時候就被設定成為自動執行,預設是每週日早上5點進行鏡像,如需要調整請修改config.php。

Step6. Master Server與Slave Server網路身份交換

image

透過「network-master2slave.php」與「network-slave2master.php」,可以快速地將伺服器的網路狀態切換,同時修改設定檔。這在Master Server出問題而需要Slave Server馬上接替他的工作時派得上用場。

作法是先在Master Server上執行「network-master2slave.php」:

[root@dspace ~]# php /root/rsync/network-master2slave.php

然後在Master Server上執行「network-slave2master.php」:

[root@dspace2 ~]# php /root/rsync/network-slave2master.php

那麼他們的網路狀態就會交換過來,用原本Master Server的IP就可以連到運作正常的Slave Server上。

相反地執行以上功能,就可以讓兩者的網路設定恢復原樣。

Step7. 手動從Slave Server取得資料到Master Server

image

 

在Master Server上執行「rsync-slave2master.php」就可以把Slave Server上的資料抓過來:

[root@dspace ~]# php /root/rsync/rsync-slave2master.php

當Slave Server資料比Master Server還要新的時候,則可以執行這個指令。

結語

用PHP來控制Linux系統有很多好處,像是陣列控制自由、字串搜尋、寫入、取代等功能方便易懂,不用像Bash Shell Script寫起來寫到快吐血都還過不了,而PHP也是我比較熟悉的語言。

DSpace鏡像功能能夠給伺服器更完整的一個備份機制,但是相對的你也得付出一台相同伺服器、佔掉一個網路位置的成本,如何考量就看你們怎麼使用了。

希望DSpace蓬勃發展,大家加油吧。

(more...)

在工人舍SX安裝Windows 7 Beta

布丁布丁吃布丁

在工人舍SX安裝Windows 7 Beta

2009-03-29-619

機種:KJS工人舍 SX系列-黑色(XP GPS版) 產品代碼:K7873

安裝作業系統:Windows 7 7000.0.081212-1400_client_en-us_Ultimate-GB1CULFRE_EN_DVD (這是2008年12月20日微軟發給部份測試者的版本)

這個型號買來的時候是安裝Windows XP Home版本,本來就打算重新安裝成Windows XP Professional版,不過在這之前,聽說Windows 7對於觸控介面設計有獨到之處,一時興起就抓了Windows 7來安裝看看,結果讓我十分滿意,真要用觸控功能的話,比起Windows XP,我會更喜歡Windows 7。Windows 7具有較適合觸控的介面設計,比起Windows XP美觀的系統介面,更簡單也更好用的系統設定,

安裝完成之後畫面如下,雖然我這張是取自於Wikipedia,不過與實際畫面相去不遠:

image 


硬體規格

  • 工人舍 S47-SX3KX08GTW (黑) 詳細規格表
  • 作業系統: Windows XP Home
  • 處理器:Intel Atom Z520 1.33GHz
  • 晶片組:Intel US15W Chipset
  • 記憶體:1G DDR2 667(規格是DDR2 533)
  • 螢幕:Glare WIDE 8.9"(WXGA) 1280x768 TFT Color LCD with Touch Screen Panel
  • 硬碟:80GB(1.8吋)
  • 光碟機:Tray Type, 9.5 mm (DVD Super Multi燒錄器)
  • 多媒體網路攝影機:搭載前、後雙向攝影機(2 Way Camera)前35萬畫素後200萬畫素
  • Audio:Stereo Speakers-1 watt
  • Sound Chip:AC97,Realtek ALC262 VC2-G
  • I/O Ports外接介面~
    • VGA:Yes (外接螢幕可到1680*1050)
    • USB 2.0:2組
    • FIR:No
    • DC-In:Yes
    • Headphone:Yes(前置)
    • Microphone in:Yes(前置)
    • Built-In Microphone:Yes
    • RJ-45:Yes (右側附蓋)
    • Memory Card Reader: SDHC、MicroSDHC、MS(包括duo),個別獨立的讀卡機
    • Express Card Slot:Yes (特色!)
    • Power Button:Yes
    • Launch Buttons:Yes
    • Wireless On/Off (w/LED):Yes
    • Ethernet (10/100M):10/100
    • Wireless LAN:B/G
    • WLAN Antenna Ready:Yes
    • Input Device~Keyboard:TWN Keyboard
    • Pointing:Touch Pad with 2 pick buttons (左鍵加大是貼心設計)
    • Battery type:3-Cell
    • Battery life:2.5 hrs (跟大多數小筆電比起來略短)
    • AC Adaptor:19V/50W
    • Bluetooth:QCOM USB 2.0
    • 尺寸:227mm (W) x 170mm (D) x 25.4 ~ 33mm (H)
    • 重量:1.2kg(不含電池)
    • 保固:商品一律依其原廠或代理商之保固條約內容所履行。工人舍筆記型電腦行動電腦主體及內部組件保固一年、電池與AC變壓器

查看Windows 7的基本資訊如下:

工人舍SX Windows7基本資訊 


Windows體驗指數1.9分

工人舍SX Windows體驗指數

Windows體驗指數以1到7.9的分數範圍來評定電腦的等級,而這之中取最低的分數作為該電腦的基本分數。工人舍SX所獲得的分數如下表,基本分數取最低子分為1.9分。

元件 分級資料 子分數 備註
處理器 計算(每秒) 1.9 Intel Atom Z520 1.33GHz
記憶體(RAM) 每秒的記憶體運算 4.2 1G DDR2 667(規格是DDR2 533)
圖片 Windows Aero的桌面效能 2.9 Intel US15W Chipset
遊戲圖形: 3D商業和遊戲圖形效能 2.5
主要硬碟: 磁碟資料傳送速率 1.9 TOSHIBA MK8025GAL,80GB(1.8吋),平均傳輸速率為26.9MB/sec,隨機存取時間23.4ms

關於工人舍SX的效能報告,可以參考傳說中的挨踢部門: KOHJINSHA 工人舍 SX 台灣版 SX3KP08HTW --實測篇


工人舍SX的驅動程式皆可正常安裝

2009-03-29-620

工人舍大部分的驅動程式都可以順利安裝在這個版本的Windows 7,唯有顯示卡的驅動程式安裝的時候失敗,但在經過Windows Update之後就能夠順利運作。

2009-03-29-628 2009-03-29-626

這包括了各種的快捷鍵,像是右邊的上下快捷鍵(如上圖左,調整亮度)、鍵盤Fn搭配的功能鍵(如上圖右,調整照相機)、光碟機開關、無線網路開關(這應該只是牽涉到硬體層面)。另外GPS我沒有測試。


開機大約1分26秒

從出現工人舍畫面到進入Window 7的檔案總管,所需時間大約是1分26秒。中間要選擇Windows版本是因為之前安裝的Windows XP Home的緣故,稍微拖累了一些時間。


關機大約25秒

關機 從按下「關機」指令,看完Windows Logoff到畫面消失,時間大約是24秒。但是工人舍SX的電 源燈熄滅大約要40秒,我猜可能是之後工人舍SX要自己關掉一些硬體的關係,所以比起作業系統又稍微延後了一些時間。


Origami Experience 2.0可順利運作,但圖片投影片不太順暢

 

2009-03-29-621

畫面上看到的是微軟為UMPC或MID裝置所作的Origami Experience 2.0,相關資料可以看看以下網頁:

簡單地說,這功能讓具有觸控螢幕的電腦看起來像PMP一樣地可以用手指操作,包括按鈕加大,把影音播放、圖片播放等功能提到前面來用,加入RSS摘要功能,改善IE瀏覽器(其實也只有工具列跟移動網頁的方式不同而已)。功能並沒有很豐富,運作起來也不是很順暢,怎麼說也不會讓人覺得滿意。

接下來就看一下一些圖片吧:

2009-03-29-622

手寫便條紙這邊我還蠻喜歡的,十分方便。

2009-03-29-623

可以檢視照片。使用投影片模式播放照片又有許多有趣的類型,但播放起來並不順暢。

2009-03-29-624

像拍立得的形式,下面顯示檔案名稱。

2009-03-29-625

把螢幕切割成很多塊各別顯示圖片。


Open PCman Combo Nova亂碼

Windows 7 PCman亂碼

儘管已經安裝了繁體中文語言包,Open PCman Combo 9.2.2 (Novus)依然是亂碼。可憐的巴哈姆特身上盡是看不懂得外國語言。


其他新功能

有許多篇報導已經介紹過Windows 7的新功能,我也不特別去贅述,有興趣的話可以參考以下資料:

 

<-- Post Catalog -->

(more...)

zFTPServer Suite Build: 2008-06-18 12:11

布丁布丁吃布丁

0 Comments

zFTPServer Suite Build: 2008-06-18 12:11

image

許多人都發現到現在zFTPServer Suite最新的版本並不支援中文亂碼,所以我補一下不會造成亂碼的版本。

zFTPServer Suite Version Information

  • Administration Build: 2008-06-18 12:11
  • Server Build: 2008-06-18 12:11

SkyDrive空間:zFTPServer_Suite_Setup 2008-06-18 1211.exe

連線軟體使用的是FileZilla 3.2.1 Portable,不需要特別設定語系,即可正常讀取大多數中文檔名(細部還沒有特別去測試)。使用IE連FTP可以正常下載,但是上傳時會因為路徑中文變成亂碼而無法上傳。

(more...)

談DSpace 1.5.1備份機制

布丁布丁吃布丁

談DSpace 1.5.1備份機制

繼前一篇「DSpace 1.5.1安裝法」之後,今天我們來談談DSpace的備份機制,其實1.4.2或1.5.1都可以適用,因為基本架構並沒有差別太多,但本篇則是以1.5.1為主要適用對象。

要備份,就要先知道你要備份什麼東西。DSpace這個系統又區分成很多個部份,重要性不一、檔案大小也都不一定。我建議將備份機制分成這四個部份來看:

  1. DSpace原始程式的備份與還原
  2. DSpace安裝程式(排除掉assetstore)的備份與還原
  3. DSpace安裝程式中的assetstore的備份與還原
  4. DSpace資料庫的備份與還原

以下一一說明他們的功能、位置、備份與還原機制。由於大部分指令都相同,我只會在「DSpace原始程式備份與還原」有比較詳細的說明,其他的部份則挑重點說明而已。

為了方便大家安裝、使用,我先在開頭增加「快速安裝」小節,需要詳細的說明,再看看後面的小節吧。


快速安裝

  1. 下載備份與還原的腳本程式
    SkyDrive空間,zip壓縮檔,6.7KBhttp://0rz.tw/bdpr0
  2. 你可以利用Pietty或SFTP的軟體(如FileZilla)把上面下載的檔案上傳到/root/資料夾當中。
  3. 接下來解壓縮指令為unzip,然後使用chmod將權限改成700,作法大致如下:
    [root@dspace ~]# ls
    DSpace_backup_scripts.zip
    [root@dspace ~]# unzip DSpace_backup_scripts.zip
    Archive:  DSpace_backup_scripts.zip
      inflating: backup_dspace-assetstore.sh
      inflating: backup_dspace-database.sh
      inflating: backup_dspace-src.sh
      inflating: backup_dspace.sh
      inflating: backup_search.sh
      inflating: restore_dspace-database.sh
    [root@dspace ~]# chmod 700 *.sh
    [root@dspace ~]# ll
    總計 60
    -rwx------ 1 root root 2135  3月 19  2009 backup_dspace-assetstore.sh
    -rwx------ 1 root root 1727  3月 19  2009 backup_dspace-database.sh
    -rwx------ 1 root root 2139  3月 19  2009 backup_dspace.sh
    -rwx------ 1 root root 2174  3月 19  2009 backup_dspace-src.sh
    -rwx------ 1 root root 2288  3月 20  2009 backup_search.sh
    -rw-r--r-- 1 root root 7074  3月 19 15:53 DSpace_backup_scripts.zip
    -rwx------ 1 root root 3603  3月 19  2009 restore_dspace-database.sh
  4. 共有六個檔案,功能簡述如下:
    1. backup_dspace-src:備份DSpace原始程式,預設將/opt/dspace-1.5.1-src-release備份到/opt/backup/dspace-src當中
    2. backup_dspace.sh:備份DSpace安裝檔,但排除裡面的assetstore資料夾。預設將/dspace備份到/opt/backup/dspace當中
    3. backup_dspace-assetstore.sh:備份DSpace安裝檔當中的assetstore資料夾。預設將/dspace/assetstore備份到/opt/backup/dspace-assetstore當中
    4. backup_search.sh:尋找備份檔當中指定的檔案,以便於還原
    5. backup_dspace-database.sh:備份DSpace在PostgreSQL資料庫當中的資料。預設備份到/opt/backup/dspace-database當中
    6. restore_dspace-database.sh:還原資料庫資料
  5. 設定自動排程,利用vim編輯器把排程指令加入。時間可以依照實際情況進行修改,詳情請看crontab的資料。大致作法如下:
    [root@dspace ~]$ crontab -e
    ※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。 
    #DSpace自動備份指令,請插入在文件最後
    #每週一早上3點,執行DSpace原始程式備份
    0 3  *  *  1 /root/backup_dspace-src.sh
    #每週一早上3點30分,執行DSpace安裝程式備份
    30 3  *  *  1 /root/backup_dspace.sh
    #每週一早上4點,執行DSpace的assetstore資料備份
    0 4  *  *  1 /root/backup_dspace-assetstore.sh
    #每週一早上2點30分,執行DSpace原始程式備份
    30 2  *  *  1 /root/backup_dspace-database.sh
    #分 時 日 月 週 |<========指令========>|
  6. 設定PostgreSQL資料自動認證,注意底下設定的資料需要依據你實際的情況自行修改
    [root@dspace /]# vim ~/.pgpass
    ※請用vim編輯器輸入以下資料
    個別是「資料庫位置:資料庫連接埠:資料庫名稱:使用者名稱:使用者密碼」
    localhost:5432:dspace:dspace:dspacepassword [root@dspace /]# chmod 600 ~/.pgpass
  7. 備份的資料夾,預設是在/opt/backup當中,底下依照類型區分成四個子資料夾,各子資料夾底下再依日期建立資料夾,然後底下才是實際的備份檔。四個子資料夾個別是:
    1. dspace-src:DSpace原始程式,預設來自/opt/dspace-1.5.1-src-release
    2. dspace:DSpace安裝程式,預設來自/dspace
    3. dspace-assetstore:DSpace的assetstore資料夾,預設來自/dspace/assetstore
    4. dspace-database:DSpace的資料庫資料,預設來自於PostgreSQL
  8. 要在備份檔當中搜尋特定檔案,請執行backup_search.sh:
    [root@dspace ~]# /root/backup_search.sh
  9. 要還原資料庫資料,請執行restore_dspace-database.sh:
    [root@dspace ~]# /root/restore_dspace-database.sh

DSpace原始程式備份與還原

  • 預設位置:/opt/dspace-1.5.1-src-release
  • 備份位置:/opt/backup/dspace-src/
  • 估計壓縮之後備份檔案大小估計
    完全備份檔案大小:443MB
    最小差異備份檔案大小:16K
  • 重要性:●○○○○ 大約1周備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace最原始的安裝程式,通常是由「dspace-1.5.1-src-release.tar.gz 」解壓縮而來的資料夾。這是保留了DSpace系統最原始的程式碼。修改DSpace的時候,通常都會修改原始程式,然後再進行「mvn package」等指令進行編譯。在DSpace說明書裡,通常以[dspace-src]代稱。

不過通常我在修改DSpace的時候,都是在Windows環境底下利用Dreamweaver或EmEditor之類的軟體修改、儲存,然後修改完成之後再上傳到伺服器。因此即使伺服器上的原始程式不存在也無所謂,只要重新上傳即可。

另一方面,不採用「完整備份」的理由在於DSpace原始程式在執行「mvn package」編譯之後,會佔用相當大的空間。如果每次都執行完整備份,想必硬碟空間很快就會被佔滿了。故採用差異備份,只有距離上次備份之後修改的檔案才會被納入新的備份檔案當中。

備份腳本程式(script)

接下來我們說明備份的腳本程式。程式內有些設定的部份,請依照你實際的狀況進行修改。

#!/bin/bash
# File Name: backup_dspace-src.sh
# Program:
#       這隻程式將會備份DSpace原始程式
# History:
# 2009/03/18    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace原始程式備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/opt/dspace-1.5.1-src-release'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=''
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-src'
#設定備份檔的檔案名稱
backup_filename='dspace-src-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)

backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$time
cd $backup_path
for i in *
do
         last_backup_time=$i
done
#把最新的時間存入變數$last_backup_time
#last_backup_time=$i

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-src.sh 」當中,利用chmod將權限設定為700,然後試著執行看看能不能顯示:

[root@dspace ~]# vim /root/backup_dspace-src.sh
※請利用vim編輯器把上面的程式碼加入
[root@dspace ~]# chmod 700 /root/backup_dspace-src.sh
[root@dspace ~]# /root/backup_dspace-src.sh
執行DSpace原始程式備份…
※中間會顯示很多目錄,這是tar在打包與壓縮的檔案清單
==========================================
備份的目標:/opt/dspace-1.5.1-src-release
備份檔位置:
443M       /opt/backup/dspace-src/20090318/dspace-src-20090318.tar.gz
備份完成!
[root@dspace ~]# ll -h /opt/backup/dspace-src/20090318
總計 444M
-rwx------ 1 dspace dspace 443M  3月 18 10:17 dspace-1.5.1-src-release.bak.tar.gz
※如果有看到本日的備份檔案,表示備份完成!
排程自動執行備份

確認腳本程式可以執行之後,我們把這個程式排入自動排程當中。執行「crontab -e」指令,開啟自動排程的列表,並且在最後加入以下排程指令。排程當中的週一或3點都可以照你的意思變更,週的範圍為「0~7」,0或7都表示星期天;小時的範圍則是0~23。

[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上3點,執行DSpace原始程式備份
0 3  *  *  1 /root/backup_dspace-src.sh
#分 時 日 月 週 |<========指令========>|

如此就安裝完成啦。

備份檔的還原

差異備份雖然能夠節省空間,但缺點是檔案零碎,難以還原。舉例來說,我要備份test.txt的時候,會因為test.txt的修改時間不同,而會加入不同的備份檔當中。今天修改的檔案,只會加入明天的備份檔裡面。如果沒有再更動的話,則之後的備份檔都不會納入這個檔案。

備份時間點 test.txt修改時間 備份檔檔名 test.txt是否加入備份檔中?
3/17 3/16 …/20090317/backup.tar.gz
3/18 3/16 …/20090318/backup.tar.gz
3/19 3/19 …/20090319/backup.tar.gz
3/20 3/19 …/20090320/backup.tar.gz

.因此,還原前的第一步是找尋該檔案存放在哪個備份檔裡面,或著是說,看你要還原的時間點在何時。

我撰寫了一個查詢備份檔的程式,可以在多個備份檔當中,找到具有包含你指定檔名或路徑的備份檔。程式碼如下:

#!/bin/bash
# File Name: backup_search.sh
# Program:
#       找尋具有指定檔名的備份檔
# History:
# 2009/03/18    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#設定備份檔案的根目錄位置
backup_root_path_default='/opt/backup'

#提示使用者輸入根目錄位置,否則自行設定預設值
read -p "請輸入備份檔根目錄的位置(預設為$backup_root_path_default):" backup_root_path
        if [ "$backup_root_path" == "" ];then
                backup_root_path=$backup_root_path_default
        fi

#移動到備份檔案根目錄,顯示有哪些備份檔類型,然後設定其一為預設值
cd $backup_root_path
echo "以下是在備份目錄當中的備份檔類型:"
ls
for d in *dspace*
do
        backup_path_default=$d
        break
done

#提示使用者輸入
read -p "請輸入備份檔的位置(預設為/opt/backup/dspace-src):" backup_path
read -p "請輸入要查詢的檔名:" filename

如果沒有輸入檔名,則結束程式
if [ "$filename" == "" ]; then
       echo "沒有要查詢的檔案,結束程式。"
       exit 0
fi

#設定路徑預設值
if [ "$backup_path" == "" ]; then
        backup_path='/opt/backup/dspace-src'
fi

#顯示訊息
echo "搜尋開始"
echo "====================================="

#要查詢的檔案列表
folder_list=$(ls $backup_path/ | tac)
for folder in $folder_list
do
        file=$(ls $backup_path/$folder/*.tar.gz)
        for f in $file
        do
                getfile=$(tar -zt -f $f | grep $filename)

                getflag="false"
                for g in $getfile
                do
                        if [ $g != "" ]; then
                                getflag="true"
                                break
                        fi
                done
                if [ "$getflag" == "true" ]; then
                        echo "[備份檔中有目標檔案:"$f"]";
                        for g in $getfile
                        do
                                echo $g
                        done
                fi
        done
done

#顯示訊息
echo "====================================="
echo "搜尋完畢"

使用方法,請直接執行之後,程式會詢問你要查詢的備份檔路徑以及你要查詢的檔名,然後稍等一下,他就會把找到的資料回報再畫面上囉,日期最新的會優先搜尋。以查詢「dspace.cfg」為例,操作過程如下,如果已經找到你要的檔案,那麼你隨時可以按「Ctrl + c」來中斷搜尋過程。

[root@dspace ~]# /root/backup_search.sh
請輸入備份檔的位置(預設為/opt/backup/dspace-src):/opt/backup/dspace-src 
請輸入要查詢的檔名:dspace.cfg 
搜尋開始
=====================================
[備份檔中有目標檔案:/opt/backup/dspace-src/20090318/dspace-1.5.1-src-release.bak.tar.gz]
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg~
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/dspace-1.5.1-build.dir/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/archive-tmp/dspace.cfg.766468355.filtered
[備份檔中有目標檔案:/opt/backup/dspace-src/20090317/dspace-1.5.1-src-release.bak.tar.gz]
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/dspace-1.5.1-build.dir/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/archive-tmp/dspace.cfg.766468355.filtered
=====================================
搜尋完畢
[root@dspace ~]#

找到那些備份檔,然後你可以估算一下要還原到多久之前的檔案,並利用tar指令來解壓縮,然後用cp指令覆蓋過去。 如果不熟悉Bash指令的操作,也可以用圖形介面來操作啦。指令的操作過程大致如下:

移動到有備份檔的目錄底下 
[root@dspace ~]# cd /opt/backup/dspace-src/20090317/
以tar解壓縮,解壓縮完畢之後,在該資料夾底下會建立opt目錄,也就是存放備份檔的目錄 
[root@dspace 20090317]# tar -zxf dspace-1.5.1-src-release.bak.tar.gz
移動到備份檔案裡面 
[root@dspace 20090317]# cd opt/dspace-1.5.1-src-release/dspace/config/
利用ls指令,查看是否有「dspace.cfg」 
[root@dspace config]# ls
controlled-vocabularies  item-submission.xml
crosswalks               log4j-console.properties
dc2mods.cfg              log4j-handle-plugin.properties
default.context.xml      log4j.properties
default.license          log4j.xml
dspace.cfg               Message_zh_TW_TLH.properties
dspace.cfg~              news-side.html
dstat.cfg                news-top.html
dstat.map                news-xmlui.xml
emails                   oaicat.properties
input-forms.dtd          registries
input-forms.xml          xmlui.dtd
item-submission.dtd      xmlui.xconf
利用cp指令複製dspace.cfg到現在程式的位置底下 
[root@dspace config]# cp -r dspace.cfg /opt/dspace-1.5.1-src-release/dspace/config/
cp:是否覆寫 ‘/opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg’? y
移動到剛剛的備份檔目錄當中 
[root@dspace config]# cd /opt/backup/dspace-src/20090317/
利用rm指令刪除已經使用完畢的opt目錄 
[root@dspace 20090317]# rm -rf opt

DSpace安裝程式(排除掉assetstore)的備份與還原

  • 預設位置:/dspace (排除/dspace/assetstore)
  • 備份位置:/opt/backup/dspace/
  • 估計壓縮之後備份檔案大小:
    完整備份:123M
    最小差異備份:69K
  • 重要性:●●○○○ 大約1周備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace在經過mvn package與ant fresh_install等安裝步驟之後,預設會安裝到「/dspace」目錄底下,你可以在原始程式的[dspace-src]/dspace/config/dspace.cfg修改這個路徑。通常在DSpace的說明書裡面,會以[dspace]代稱。這裡的資料會影響到DSpace系統的設定與運作,特別是/dspace/config裡面的設定資料。

由於DSpace安裝程式基本上也是從原始程式編譯而來,也就是說有原始程式的話,安裝程式相對上也不需要太過重複備份。因此我們採用的是差異備份,只有距離上次備份之後變更的檔案,才會被納入這次的備份檔當中。

值得一提的是/dspace/assetstore的部份需要另外處理,因為這是DSpace中典藏的數位檔案資料預設位置,不僅重要、也會佔去許多空間,下一節會有更詳細的說明。

備份腳本程式、自動排程與還原

大致上與DSpace原始程式的備份方法差不多,但是要考慮到排除/dspace/assetstore路徑底下的資料。如果你的備份路徑有所修改的話,請依照程式中的註解來修改實際的設定:

#!/bin/bash
# File Name: backup_dspace.sh
# Program:
#       這隻程式將會備份DSpace安裝程式(排除assetstore)
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace安裝程式備份(排除assetstore)…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/dspace'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=$target_path'/assetstore'
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace'
#設定備份檔的檔案名稱
backup_filename='dspace-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$last_backup_time
cd $backup_path
for i in *
do
         last_backup_time=$i
done

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

跟之前的作法一樣,請以root的身份,把這個腳本檔儲存在「/root/backup_dspace.sh 」當中,利用chmod將權限設定為700,然後利用crontab -e指令加入自動排程中吧。

[root@dspace ~]$ vim /root/backup_dspace.sh
※請把上面的程式碼插入backup_dspace.sh檔案中吧!
[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上3點30分,執行DSpace安裝程式備份
30 3  *  *  1 /root/backup_dspace.sh
#分 時 日 月 週 |<========指令========>|

還原方法也都跟之前相同,請利用backup_search.sh來找到保存之前檔案的備份檔吧。 


DSpace安裝程式中的assetstore的備份與還原

  • 預設位置:/dspace/assetstore
  • 備份位置:/opt/backup/dspace-assetstore/
  • 估計壓縮之後備份檔案大小:
    最大備份檔大小:端看你系統當中的資料量
    最小差異備份檔案大小:4K
  • 重要性:●●●○○ 大約3天備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace當中的assetstore是存放使用者上傳資料到DSpace系統當中的實體資料資料夾。是的,你所上傳的那些圖片、影片都不會存在資料庫,而是存在這個資料夾當中。預設會安裝到「/dspace/assetstore」目錄底下,你可以在原始程式的[dspace-src]/dspace/config/dspace.cfg修改這個路徑。

assetstore資料跟資料庫的東西一樣重要、無可取代!只是變動的頻率不大。當身為機構典藏系統的DSpace運作時間一久,assetstore資料夾將會大的跟怪物一樣,因此在此我們採用差異備份策略,並縮短備份的執行時間。如果你覺得很assetstore很重要,又有足夠的空間可以做完整備份,你也可以修改備份腳本程式裡面的設定以執行完整備份。

備份腳本程式、自動排程與還原

備份腳本檔跟之前的一樣,如果你的備份路徑有所修改的話,請依照程式中的註解來修改實際的設定:

#!/bin/bash
# File Name: backup_dspace-assetstore.sh
# Program:
#       這隻程式將會備份DSpace中的assetstore
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace的assetstore資料備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/dspace/assetstore'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=''
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-assetstore'
#設定備份檔的檔案名稱
backup_filename='dspace-assetstore-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$last_backup_time
cd $backup_path
for i in *
do
         last_backup_time=$i
done

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

跟之前的作法一樣,請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-assetstore.sh 」當中,利用chmod將權限設定為700,然後利用crontab -e指令加入自動排程中吧。

[root@dspace ~]$ vim /root/backup_dspace-assetstore.sh
※請把上面的程式碼插入backup_dspace-assetstore.sh檔案中吧! 
[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上4點,執行DSpace的assetstore資料備份
0 4  *  *  1 /root/backup_dspace-assetstore.sh
#分 時 日 月 週 |<========指令========>|

還原方法也都跟之前相同,請利用backup_search.sh來找到保存之前檔案的備份檔吧。


DSpace資料庫的備份與還原

  • 預設位置:從PostgreSQL資料庫當中匯出
    ※實體檔案在PostgreSQL預設安裝位置/var/lib/pgsql/data/base/當中,但不同電腦的PostgreSQL並不能用這些檔案來作匯出匯入,要實際執行匯出匯入指令才行!
  • 備份位置:/opt/backup/dspace-database/
  • 估計壓縮之後備份檔案大小估計:
    最小備份檔案:32K
  • 重要性:●●●●● 大約每天備份一次
  • 備份類型:完整備份 (每一份備份檔都能夠完整還原)
功能與重要性說明

DSpace系統使用資料庫,預設是使用PostgreSQL,我們這邊介紹的也是針對PostgreSQL的備份與還原方法。資料庫的資料變更頻率非常高,同樣的也是無可取代的珍貴資料,建議每天備份一次。DSpace在PostgreSQL中的資料幾乎都是文字資料,因此壓縮之後的檔案大小也應該可以接受。有個參考數據是,某教育部計畫的DSpace塞了12萬多筆item之後,每次資料庫完整備份大小約40MB。至於實體的檔案則是保存在[dspace]/assetstore當中,資料庫只有儲存實體檔案的相關資訊與位置等資料,而不是真正佔吃空間的部份。

備份腳本程式(script)

這次的備份腳本跟之前不同,由於資料來源是要從PostgreSQL資料庫當中匯出,所以作法有些改變。另外程式內有些設定的部份,請依照你實際的狀況進行修改。

有一個部份必需要特別說明,PostgreSQL可以把資料庫匯出成為sql或tar打包檔,但是根據我自己的測試,只有匯出成tar打包檔才能正確地再度匯入以還原資料庫。故以下的程式當中我們是把資料庫的資料匯出成為tar檔,再進行壓縮的動作。而還原的時候我們也是以tar打包檔的狀態還原,請看下一節的程式碼說明吧。

#!/bin/bash
# File Name: backup_dspace-database.sh
# Program:
#       這隻程式將會備份DSpace的資料庫
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace資料庫備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的資料庫名稱
database_name='dspace'
#設定資料庫的擁有者
database_owner='dspace'
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-database'
#設定備份檔的檔案名稱
backup_filename='dspace-database-'$dt'.gz'
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#匯出的打包檔檔名 
database_tar=$(echo $backup_filename | sed s/".gz"/""/g)

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt
#移動到備份資料夾
cd $backup_path/$dt

#資料庫匯出,重整資料庫,然後壓縮
pg_dump $database_name -U $database_owner | gzip > $backup_filename

#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo '備份目標資料庫:'$database_name
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-database.sh 」當中,利用chmod將權限設定為700,然後試著執行看看能不能顯示:

[root@dspace ~]# vim backup_dspace-database.sh
※請利用vim編輯器把上面的程式碼加入
[root@dspace ~]# chmod 700 /root/backup_dspace-database.sh
[root@dspace ~]# /root/backup_dspace-database.sh
執行DSpace資料庫備份…
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!
[root@dspace ~]# ll -h /opt/backup/dspace-database/20090319
總計 32K
-rwx------ 1 dspace dspace 27K  3月 19 06:33 dspace-database-20090319.tar.gz
※如果有看到本日的備份檔案,表示備份完成!
設定PostgreSQL自動認證功能

如果你的PostgreSQL連線設定(/var/lib/pgsql/data/pg_hba.conf)中連線類型不是trust,那麼在執行上面的備份指令時,系統會提示你輸入密碼。

[root@dspace ~]# /root/backup_dspace-database.sh
執行DSpace資料庫備份…
密碼:
※出現「密碼:」的時候,你要手動輸入資料庫密碼才行 
==========================================
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!

為了能讓自動備份的時候順利進行,免去輸入密碼的困擾,我們要在使用者家目錄底下新增.pgpass檔案,輸入自動認證的資料。作法如下:

[root@dspace /]# vim ~/.pgpass
※請用vim編輯器輸入以下資料,個別是「資料庫位置:資料庫連接埠:資料庫名稱:使用者名稱:使用者密碼」 localhost:5432:dspace:dspace:dspacepassword
[root@dspace /]# chmod 600 ~/.pgpass
※修改權限才能生效! 

詳細的作法,可以參考我寫的另外一篇說明「PostgreSQL連線設定與DSpace資料庫備份設定」。

排程自動執行備份

自動排程的設定沒有差別,大致上設定如下:

[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上2點30分,執行DSpace原始程式備份
30 2  *  *  1 /root/backup_dspace-database.sh
#分 時 日 月 週 |<========指令========>|
備份檔的還原

資料庫的備份檔案,要用資料庫的匯出指令來還原,我寫了一份還原的腳本程式。你需要指定備份檔的位置、日期、檔名、資料庫名稱、資料庫使用者。內容如下:

#!/bin/bash
# File Name: restore_dspace-database.sh
# Program:
#       這隻程式將會還原PostgreSQL資料庫的資料
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#提示使用者輸入備份檔的位置
read -p "請輸入備份檔的位置(預設為/opt/backup/dspace-database):" backup_path
	#設定備份檔位置的預設值
	if [ "$backup_path" == "" ]; then
	        backup_path='/opt/backup/dspace-database'
	fi

#顯示該備份檔位置底下,有哪些日期,並將預設值設為最新的日期
echo "(該備份檔位置底下有以下日期的資料:)"
ls $backup_path
backup_dates=$(ls $backup_path | tac)
for d in $backup_dates
do
	backup_date_default=$d
	break
done

#提示使用者輸入備份檔的日期
read -p "請輸入備份檔的日期(格式為YYYYMMDD,預設為$backup_date_default):" backup_date
	#設定預設備份檔的日期
	if [ "$backup_date" == "" ]; then
	        backup_date=$backup_date_default
	fi

#顯示該路徑底下有哪些備份檔案,並取得預設備份檔的檔名
echo "(該日期的備份檔位置底下有以下備份檔的資料:)"
ls $backup_path"/"$backup_date
cd $backup_path"/"$backup_date
backup_files=$(ls *.gz)
for f in $backup_files
do
	backup_filename_default=$f
	break
done

#提示使用者輸入預設檔名
read -p "請輸入備份檔的檔名(預設為$backup_filename_default):" backup_filename
	#設定備份檔的預設值
	if [ "$backup_filename" == "" ]; then
		backup_filename=$backup_filename_default
	fi

#提示使用者輸入資料庫相關資訊
read -p "請輸入要還原的資料庫名稱(預設是dspace):" database_name
read -p "請輸入要還原的資料庫擁有者(預設是dspace):" database_owner

#設定預設值
if [ "$database_name" == "" ]; then
        database_name='dspace'
fi
if [ "$database_owner" == "" ]; then
        database_owner='dspace'
fi

#提示使用者是否要先備份資料庫
read -p "是否要先備份資料庫?(y或是n,預設是y)" backup_before
if [ "$backup_before" == "" ]; then
        backup_before='y'
fi
database_tar=$(echo $backup_filename | sed s/".gz"/""/g)

#如果要先做備份的話,則執行以下指令
if [ "$backup_before" == "y" ]; then
	read -p "資料庫備份的腳本檔案是?(預設是/root/backup_dspace-database.sh)" backup_script
	if [ "$backup_script" == "" ]; then
		backup_script="/root/backup_dspace-database.sh"
	fi
	$backup_script
fi

#提示確認還原
echo "還原目標資料庫:"$database_name
echo '來源的備份檔:'$backup_path"/"$backup_date"/"$backup_filename

echo "請確認上面訊息是否正確,還原資料庫將會覆蓋現有資料庫的所有資料!"
read -p "如要繼續,請輸入yes:" restore_check

if [ "$restore_check" != "yes" ]; then
        echo "取消還原!"
        exit 0
fi

#顯示開始訊息
echo '=========================================='
echo '執行DSpace資料庫還原作業…'

#移動到備份檔所在位置
cd $backup_path"/"$backup_date

is_targz=$(echo "$backup_filename" | grep ".tar.gz")
if [ "$is_targz" == "" ]; then
	#gz式匯入法
	echo "以psql還原……"
	gunzip -c $backup_filename | psql $database_name -U $database_owner
else
	#tar.gz式pg_restore法
	echo "以pg_restore還原……"
	#解壓縮檔案
	tar -zxf $backup_filename
	#匯入PostgreSQL
	pg_restore -c -d $database_name -U $database_owner -W $database_tar
	#移除剛剛解壓縮的備份檔
	rm -f $database_tar
fi


#重整PostgreSQL
echo "重整PostgreSQL…"
psql -c ANALYZE -U $database_owner

#顯示備份結果相關訊息
echo '=========================================='
echo '還原目標資料庫:'$database_name
echo '來源的備份檔:'$backup_path"/"$backup_date"/"$backup_filename

#顯示結束訊息
echo '還原完成!'

請利用vim編輯器把以上程式碼加入/root/restore_dspace-database.sh。執行資料庫還原腳本程式,程式會提醒你輸入相關的資訊。還原資料庫需要多多注意,進行還原的時候會覆蓋原有資料庫的資料!實際操作的情況如下:

[root@dspace ~]# /root/restore_dspace-database.sh
請輸入備份檔的位置(預設為/opt/backup/dspace-database):
(該備份檔位置底下有以下日期的資料:)
20090318  20090319
請輸入備份檔的日期(格式為YYYYMMDD,預設為20090319):
(該日期的備份檔位置底下有以下備份檔的資料:)
dspace-database-20090319.tar  dspace-database-20090319.tar.gz
請輸入備份檔的檔名(預設為dspace-database-20090319.tar.gz):
請輸入要還原的資料庫名稱(預設是dspace):
請輸入要還原的資料庫擁有者(預設是dspace):
是否要先備份資料庫?(y或是n,預設是y)
資料庫備份的腳本檔案是?(預設是/root/backup_dspace-database.sh)
執行DSpace資料庫備份:
==========================================
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!
==========================================
還原目標資料庫:dspace
來源的備份檔:/opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
請確認上面訊息是否正確,還原資料庫將會覆蓋現有資料庫的所有資料!
如要繼續,請輸入yes:yes
==========================================
執行DSpace資料庫還原作業…
密碼:
※如果出現提示,此處需要輸入資料庫密碼!
pg_restore: [壓縮器(db)] PROCESSING TOC時發生錯誤:
pg_restore: [壓縮器(db)] TOC記錄5有錯誤;2615 2200 SCHEMA public postgres
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  必須是schema public的擁有者
    Command was: DROP SCHEMA public;
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  schema "public"已經存在
    Command was: CREATE SCHEMA public;
pg_restore: [壓縮器(db)] TOC記錄1949有錯誤;0 0 COMMENT SCHEMA public postgres
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  必須是schema public的擁有者
    Command was: COMMENT ON SCHEMA public IS 'Standard public schema';
pg_restore: WARNING:  無法取消任何權限
pg_restore: WARNING:  無法取消任何權限
pg_restore: WARNING:  未被賦予任何權限
pg_restore: WARNING:  未被賦予任何權限
警告,還原時忽略錯誤:3
※還原的時候出現以上錯誤,這是很正常的!
重整PostgreSQL…
WARNING:  忽略"pg_authid" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_tablespace" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_pltemplate" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_shdepend" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_auth_members" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_database" -- 只有資料表或資料庫擁有者能進行分析
ANALYZE
※分析的時候出現以上錯誤,這也是很正常的! 
==========================================
還原目標資料庫:dspace
來源的備份檔:/opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
還原完成!
[root@dspace ~]#

後記

終於把整個備份機制都好好地重整一遍了。光這一篇就寫了兩天……好累……不過也多虧寫這一篇,改進了很多原來我在伺服器上撰寫的不友善程式碼。

寫到最後連後記都不知道要寫什麼了……我越來越習慣Linux的Bash Shell操作,算是好事吧。

後來又加了快速安裝的章節,也發現自己少了一大部分沒有撰寫,然後又為backup_search.sh增加了一些功能……

希望這一篇會對使用DSpace的機構單位有所幫助!加油!<-- Post Catalog -->

(more...)