2012-03-30 76 views
2

我的EC2數據庫服務器失敗,阻止SSH或其他訪問(不知道爲什麼... grrr AWS ...這是另一回事)。從安裝卷還原PostgreSQL數據庫

我能夠製作EBS根卷的快照。我無法從該卷啓動新實例(我猜測啓動分區已損壞)。但是,我可以在新實例上附加和安裝卷。

現在我需要在新機器上安裝PostgreSQL 8.4(Ubuntu 10.04)來加載已安裝卷中的數據。這可能嗎?我試過了:

pg_ctl start -D /<mount_dir>/etc/postgresql/8.4/main/ 

但是沒有喜悅... PostgreSQL只是從空表開始。

/etc/postgresql/8.4/main/ PostgreSQL數據文件的正確位置?

是否有辦法以PostgreSQL可以再次讀取的方式從掛載的卷中恢復數據?

+0

-D後面的選項應該指向PG_VERSION和postgresql.conf文件所在的目錄。嘗試先找到他們。 – wildplasser 2012-03-30 09:36:01

+0

很可能是/ var/lib/postgresql/...但/ etc中的文件應該說在哪裏。哦,如果你不能應付實例或存儲隨機消失,那麼所有賬戶亞馬遜是不是你想如何託管你的數據庫。 – 2012-03-30 12:19:30

+1

問題應該轉移到服務器故障。原始海報:請指定操作系統和版本,檢查來自pg_ctl的消息的錯誤日誌等。 – 2012-03-30 14:38:24

回答

4

(你真的應該註明你的發行版和版本等,有了這樣的系統管理問題。)

通過pg_ctl運行PG如上圖所示應該工作,假設原始數據庫是從PG 8.4和你試圖用來啓動它的二進制文件也是如此。也許你忘了停止由發行版自動啓動的PostgreSQL實例?或者在錯誤的端口上連接,所以你在另一個端口上獲得了發行版的默認實例,而不是你的數據庫(或者unix套接字使用不同的unix套接字路徑)?

就我個人而言,我不會做你在做什麼。首先,在我做別的事情之前,我會做一個完整的備份整個數據目錄,因爲你顯然沒有很好的備份,否則你不會擔心這一點。現在就拿他們來,因爲如果你在恢復時會破壞某些東西,你會恨自己。如此故障所證明的,信任亞馬遜的存儲(快照或其他方式)可能不夠好。

一旦你做到了這一點:恢復您的數據庫將是最簡單的方法,在新的情況下,你知道你沒有對任何重要的數據有相同主要版本PostgreSQL的爲您原審(如「8.4」或「9.0」),並安裝:

/etc/init.d/postgresql-8.4 stop 
datadir=/var/lib/postgresql/8.4/main 
rm -rf "$datadir" 
cp -aR /<mount_dir>/etc/postgresql/8.4/main/ "$datadir" 
chown -R postgres:postgres "$datadir" 
/etc/init.d/postgresql-8.4 start 

換句話說:取副本,修復權限,啓動DB。

您可能需要編輯/etc/postgresql/8.4/main/postgresql.conf和/或/etc/postgresql/8.4/main/pg_hba.conf,因爲您對原件所做的任何編輯都不存在;他們正在損壞的根FS上。數據庫中的postgresql.confpg_hba.conf只是在Debian下的符號鏈接 - 我瞭解背後的基本原理,但不愛。

一旦你得到它,立即pg_dumpall和/或只是你的重要DB的pg_dump,然後將它複製到安全的地方。

+0

感謝您提供所有有用的意見。我設法使用@Craig描述的方法使它從postgresql文檔中找到:http://www.postgresql.org/docs/current/interactive/backup-file.html現在就開始更好的備份! – lubar 2012-04-01 00:19:54

+0

拯救生命!如果你有一個複雜的數據庫設置並在新磁盤上安裝一個新的發行版非常有用。 只需安裝postgresql服務器,將舊數據目錄複製到新磁盤的pg數據目錄中,啓動服務器和_voilá_! – ElGranBarta 2016-07-10 03:39:58