從檔案系統備份還原 PostgreSQL 資料庫

從檔案系統備份還原 PostgreSQL 資料庫

我有 PostgreSQL 8.3 資料目錄備份。我需要將此備份中的資料庫複製到新的 PostgreSQL 實例中。由於舊伺服器的問題,我無法對資料庫進行 pg_dump。

我已經弄清楚哪個目錄是有問題的資料庫的目錄。例如,在 MySQL 中,您通常要做的就是關閉伺服器,複製目錄並重新啟動它,資料庫就可用了。現在這不適用於 PostgreSQL,我懷疑這是因為該資料庫未在 global/pg_database 檔案中列出。這個檔案似乎是 PostgreSQL 啟動時自動產生的,那我該如何告訴系統資料庫在那裡呢?

答案1

請注意,在 PostgreSQL 中,您的叢集資料目錄是一個獨立的單元,無法按照文件可靠地部分恢復這裡

您最好的希望是使用舊伺服器的完整資料目錄並在其上啟動伺服器,然後從從那裡獲得的資料庫轉儲進行還原:

  1. 取得適合新主機上設定的 postgresql.conf (透過舊主機中的檔案(您在此處變更)和新資料目錄來定位自己)
  2. 找出舊安裝的 PostgreSQL 超級使用者的使用者名稱 - 最有可能是 postgres。
  3. 在新主機上建立此使用者名稱(UNIX 使用者),除非該使用者名稱已存在。
  4. 將舊資料目錄提供(chown)給該用戶,除非 uid 與舊伺服器上的 uid 相符。
  5. 在舊資料目錄中配置 pg_hba.conf 以允許本機使用者連接到相同的 postgres 使用者名稱(這通常是預設值,但請檢查)。
  6. 以與舊資料目錄的超級使用者同名的 UNIX 使用者身分執行舊資料庫集群,例如對於使用者 postgres:
    sudo -u postgres postgres -D old_data_directory
    # or with su:
    su postgres
    postgres -D old_data_directory
    
  7. 再次使用通常的使用者名稱 postgres 轉儲舊資料庫:
    sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql
    # becoming postgres with su analogous to above
    
  8. 使 dump_file.sql 適應新伺服器的使用者名稱等;在那裡創建具有適當所有權的空白資料庫
  9. 將資料庫掃描到新伺服器:
    sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name
    # once again, getting postgres privileges using su analogous to above
    

這應該能讓你做好準備,或至少為你提供一條到達那裡的好路徑。

相關內容