Postgresql

如何防止更改我的 PostgreSQL 數據庫?

  • February 29, 2020

我的步驟:

  1. pg_dumpall在伺服器上執行決賽prod-server-old
  2. 永遠關閉prod-server-old
  3. 將輸出複製到不同的伺服器 ( prod-server-new)
  4. 在那裡恢復數據庫。
  5. 所有流量都到prod-server-new現在

如何避免在pg_dumpall(step1和step2之間)對數據庫進行修改,使這段時間的修改不會失去?

在我的情況下,有一小段停機時間是 100% 可以的。

“集群”中有幾個數據庫(順便說一句,我不喜歡“集群”這個詞。我想大多數人認為“集群”是一組多台電腦,但在這種情況下它意味著一個 Postgres 伺服器,它擁有幾個數據庫)。

我的問題被標記為可能與“使 Postgres 數據庫暫時只讀(用於執行卷快照)”重複。我不認為它是重複的,因為在我的情況下是不同的,因為我不要求臨時只讀狀態。

一種解決方法:

更改 PostgreSQL 的埠prod-server-old。這樣,客戶端不太可能在pg_dumpall --port=OTHER_PORT.

有兩種方法可以做到這一點:

  • 如果您不介意停機時間(簡單方法):

撤銷對該組的connect特權public。這將阻止除超級使用者之外的所有人進行連接。然後重新啟動伺服器或終止所有連接,然後使用超級使用者帳戶繼續備份。

REVOKE CONNECT TO DATABASE (database) FROM public
  • 如果您確實介意停機時間:

將您的數據庫置於只讀模式:

ALTER DATABASE (database) SET default_transaction_read_only = true;

繼續pg_dumpall。無需重新啟動,也無需停機。

當然,您必須在要“鎖定”的每個數據庫上重複此操作。如果您有大量數據庫,您可以將整個集群設為只讀:default_transaction_read_only = on;在您的 postgresql.conf 中設置,然後重新載入 postgres 服務。

請注意,我沒有測試任何這些命令,風險自負。

引用自:https://dba.stackexchange.com/questions/186045