:::

PostgreSQL連線設定與DSpace資料庫備份設定

3月 03, 2009 , 0 Comments Edit Copy Download

安裝DSpace的時候要先把PostgreSQL的連線類型改成不需要密碼的「trust」,但是安裝完之後要改回「md5」(以md5加密的密碼)或「password」(必須詢問密碼),以提高PostgreSQL的安全性。

但是本機端需要詢問密碼的情況下,會讓crontab自動排程無法自動備份(dump)PostgreSQL的資料庫。因此必須設定該帳號家目錄底下的.pgpass,讓該帳號不需要再次詢問密碼就能夠直接通過PostgreSQL的認證連線,以順利匯出資料庫。

詳細步驟說明如下:

安裝DSpace之前需要修改的PostgreSQL設定

安裝DSpace的過程中,我建議先把PostgreSQL的連線設定(/var/lib/pgsql/data/pg_hba.conf,註1)裡每一個連線類型改成trust,範例如下:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust #ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust #ident sameuser
# IPv6 local connections:
host    all         all         ::1/128               trust #ident sameuser
# for DSpace
host    dspace      dspace      127.0.0.1             trust #255.255.255.
  • 註1^PostgreSQL在CentOS中預設安裝位置在/var/lib/pgsql/當中,故連線的設定檔將位於/var/lib/pgsql/data/pg_hba.conf,如果是手動安裝則可能會在其他地方。

安裝完DSpace之後的PostgreSQL連線設定

安裝完成DSpace之後,為了提高PostgreSQL的安全性,設定為本機端連線的時候也需要詢問密碼。

一樣是修改連線設定檔/var/lib/pgsql/data/pg_hba.conf,將method改成md5(以MD5編碼加密)或password(需要詢問密碼),修改範例如下:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               md5 #ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5 #ident sameuser
# IPv6 local connections:
host    all         all         ::1/128               md5 #ident sameuser
host    dspace      dspace      127.0.0.1             password #255.255.255.255

這樣修改主要是方便使用phpPgAdmin——一個用網頁介面管理PostgreSQL的工具(註2 )。

下圖是phpPgAdmin的介面:

image 

如果連線設定依舊是trust的情況下,任何使用者只要連到該系統的phpPgAdmin工具、知道該帳號名稱,則使用任何密碼都可以登入PostgreSQL資料庫中。

使用phpPgAdmin時,除了需要修改PostgreSQL的連線為「md5」或「password」之外,最好如phpMyAdmin一樣地還加上Apache利用.htaccess來實作的認證機制(註3)。

PostgreSQL自動備份策略

如果PostgreSQL的連線設定需要使用密碼,那麼在利用crontab排程自動執行備份指令時,也會遇到需要輸入密碼而無法自動執行的情況。

PostgreSQL在8版之後(好像是,至少目前我們使用的都是8版)可以使用「.pgpass」來為使用者設定自動認證

以下介紹詳細步驟

  1. 假如我們要連線的資料庫位置為「localhost」(表示本機端)、連接埠為「5432」(PostgreSQL預設連接埠)、資料庫名稱為「database」、資料庫帳號為「username」、密碼為「password」。注意,username不一定要跟你執行crontab的帳號相同。
  2. 切換到執行crontab的LINUX實體帳號,假如是「dspace」,則利用su指令切換:
  3. [root@dspace /]# su dspace 
  4. 在該帳號的家目錄新增檔案「.pgpass」
  5. [dspace@dspace /]# vim ~/.pgpass
  6. 利用vim編輯器輸入以下資料:
  7. localhost:5432:database:username:password 
    完成之後儲存離開。
  8. 修改.pgpass的權限為600
  9. [dspace@dspace /]# chmod 600 ~/.pgpass
  10. 測試看看,利用pg_dump匯出資料庫到「/var/lib/pgsql/backups/bkup.sql」
  11. [dspace@dspace /]# pg_dump -U username database > /var/lib/pgsql/backups/bkup.sql 
  12. 如果「/var/lib/pgsql/backups/bkup.sql」有檔案,並且內文為正確的sql檔,則表示認證成功。反之,如果系統要求你輸入密碼,那可能是哪個步驟做錯了,請回頭一一確認。

當確認可以自動通過認證,以指令執行PostgreSQL匯出的之後,就可以把這些指令加入crontab排程中囉。

資料庫一定要天天備份,祝大家伺服器都能運作順利


延伸閱讀