我在幾個網站的生產中使用 Debian 6 (Squeeze)。我決定使用 postgresql 向後移植,以便可以使用 PostgreSQL 9.0 功能。我認為它會保留 9.0 並接收該主要版本的更新。
不幸的是,Squeeze 向後移植已更新到 PostgreSQL 9.1,所以我可能不會收到 9.0 的更新。
我計劃升級到 9.1,但我知道這不會自動完成。
我讀過官方的 pg_upgrade 和 debian 的 pg_upgradecluster,但我希望有完整的升級指南。
- 需要執行哪些步驟(首先 apt-get install postgresql,然後 pg_upgradecluster,然後刪除舊叢集)?步驟列表會很好。
- 可能的故障場景有哪些?
- 如何為失敗做好準備並做出反應?
我只能停止資料庫幾個小時,所以我想做好準備
答案1
很難為您提供適合您的情況/環境的逐步升級過程。
我已嘗試強調以下一些要點,但您確實需要根據您的環境自訂流程。
第零步,決定是否需要升級。 Postgres 9.1 帶來了同步複製和許多其他很酷的東西,如果您需要它們,這些東西很有用,但如果您不需要,則不是立即升級的理由。
第 1 步,如果您的資料庫很大,預計這將需要很長時間。
即使使用pg_upgrade
複製資料進行備份的簡單過程也可能需要一段時間:我們的 16GB 資料庫需要一個小時或更長時間進行 pg_dump/pg_restore,或大約 10-20 分鐘進行 pg_upgrade。
第 2 步,我建議通讀9.1 發行說明。確保您需要的任何東西都沒有損壞,並且您使用的任何東西都沒有改變。
沒有什麼比資料庫升級更能破壞您的生產系統,從而真正毀掉您的一個月了。
步驟3,Postgres手冊的升級部分是必讀的。
第 4 步,(在此處插入任何特定於 Debian 的內容,但這確實不是我的包 :-)
第五步,制定升級計畫。
步驟6,測試升級計劃(技術上是可選的,但是強烈地受到推崇的)。
第 7 步,在生產系統上進行升級。
標準警告適用:
- 升級可能會破壞您的資料庫。進行備份。
- 確保您可以恢復它。
- 確保您可以恢復二進位檔案對於資料庫系統也是如此。
(如果可以的話,請保留舊的 Debian 軟體包 - 我見過有人無法退出失敗的升級,因為他們不再擁有舊的資料庫二進位文件,這確實是一個非常悲傷的景象。)
這將比您預期的時間更長。為此做好計劃。
我公司的資料庫升級政策是「週五下午 6 點開始。如果週日上午 9 點還不起作用,則回滾」。安裝臨時猴子
如果您的資料確實很重要,請在其他地方恢復它的副本並測試您的升級路徑。
是的,我用 16GB 資料庫來做這個。如果我能找到一種方法讓它發揮作用,我仍然會使用 160GB 資料庫來實現它:-)
答案2
這基本上就是第 4 步 - 加上--check
確保路徑正確的選項。我的安裝來自存儲庫,並且具有文件的標準 debian 路徑。
[email protected]:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check
上面的失敗 - 一直說我在同一連接埠上運行兩個伺服器。
以下似乎有效:
pg_dumpall -p 5432 | psql -d postgres -p 6543
這很有用。