Postgresql
Postgresql - 將捲安裝到數據目錄後停止偵聽
我暫時需要一個 180GB 的 postgresql 數據庫。出於成本考慮,我在一個便宜的 40GB 磁碟伺服器上安裝了這個,我想將一個 200GB 的捲掛載到 postgresql 數據目錄。
我的問題:在我停止 postgresql 後,掛載卷,複製內容,更新 postgresql.conf,啟動 postgresql,它停止監聽
5432
我的問題:為什麼會這樣?
我的操作順序:
- netstat 並看到 postgres 正在 5432 上偵聽任何遠端連接
root@foobar:/etc/postgresql/9.5/main# netstat -tulpen Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 112 44384 25831/postgres tcp 0 0 0.0.0.0:3451 0.0.0.0:* LISTEN 0 94839 15010/sshd tcp6 0 0 :::5432 :::* LISTEN 112 44385 25831/postgres tcp6 0 0 :::3451 :::* LISTEN 0 94848 15010/sshd
然後
- 停止 postgresql
- 創建一個新目錄 /mnt/whatever
- 將 /dev/xvdb 掛載到 /mnt/whatever/
- 將“/var/lib/postgresql/9.5/main/”的內容複製到新卷“/mnt/whatever”中
- 編輯 postgresql.conf 並將“數據目錄”更改為新卷..
data_directory = '/mnt/whatever' # use data in another directory # (change requires restart) hba_file = '/etc/postgresql/9.5/main/pg_hba.conf' # host-based authentication file # (change requires restart) ident_file = '/etc/postgresql/9.5/main/pg_ident.conf' # ident configuration file # (change requires restart)
- 啟動postgresql
- netstat 發現 postgresql 不再監聽 5432
root@foobar:/# netstat -tulpen Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:3451 0.0.0.0:* LISTEN 0 94839 15010/sshd tcp6 0 0 :::3451 :::* LISTEN 0 94848 15010/sshd
起初我認為這是
postgresql.conf
我搞砸了允許遠端連接的問題,但是在通過這個過程多次重建伺服器之後,它肯定會一直監聽5432
直到我掛載新卷。Postgresql 遠端工作正常,直到我掛載一個卷並更新 conf 中的數據目錄。此外,即使在我解除安裝卷並恢復原始的備份後,它也不會開始收聽
postgresql.conf
。在我看來,我在坐騎上做的某件事正在破壞它。我已經制定了允許
5432
IPtables 的規則,但這並不能解決它(記住,遠端連接在掛載之前工作正常,所以我不認為它的防火牆)。有什麼建議麼?
我的猜測是它的某種
lsof
東西,但我被卡住了。
- 將 ‘/var/lib/postgresql/9.5/main/’ 的內容複製到新卷 ‘/mnt/whatever’
這樣做之後,PostgreSQL 在啟動時立即失敗的最合理的原因是,此步驟沒有保留被複製的文件和目錄的確切權限/所有者。如果您使用
cp
,請確保添加該-p
選項。7)啟動postgresql
- netstat 發現 postgresql 不再監聽 5432
您似乎在搜尋網路問題,但未偵聽埠 5432 更有可能是由於 PostgreSQL 在步驟 #7 之後立即錯誤退出。正如評論中提到的,檢查 postgresql 日誌:它無法啟動的原因應該明確寫在那裡。通常日誌在
/var/log/postgresql/
(鑑於提到的路徑,它看起來像一個 Debian 系統)。