時(shí)間:2024-02-04 13:45作者:下載吧人氣:23
大家好,我是只談技術(shù)不剪發(fā)的 Tony 老師。對(duì)于企業(yè)而言,將數(shù)據(jù)庫系統(tǒng)升級(jí)到新版本通常可以獲得更好的性能、更多的功能、最新的安全補(bǔ)丁和錯(cuò)誤修復(fù)等。因此,本文就來介紹一下 PostgreSQL 數(shù)據(jù)庫版本升級(jí)的 3 種常用方案。
PostgreSQL 版本號(hào)由主要版本和次要版本組成。例如,PostgreSQL 12.4 中的 12 是主要版本,4 是次要版本;PostgreSQL 10.0 之前的版本由 3 個(gè)數(shù)字組成,例如 9.6.19,其中 9.6 是主要版本,19 是次要版本。
發(fā)布次要版本是不會(huì)改變內(nèi)存的存儲(chǔ)格式,因此總是和相同的主要版本兼容。例如,PostgreSQL 12.4 和 PostgreSQL 12.0 以及后續(xù)的 PostgreSQL 12.x 兼容。對(duì)于這些兼容版本的升級(jí)非常簡單,只需要關(guān)閉數(shù)據(jù)庫服務(wù),安裝替換二進(jìn)制的可執(zhí)行文件,重新啟動(dòng)服務(wù)即可。
接下來,我們主要討論 PostgreSQL 的跨版本升級(jí)問題,例如從 PostgreSQL 12.x 升級(jí)到 PostgreSQL 13.y。主要版本的升級(jí)可能會(huì)修改內(nèi)部數(shù)據(jù)的存儲(chǔ)格式,因此需要執(zhí)行額外的操作。常用的跨版本升級(jí)方法和適用場景如下:
升級(jí)方法 | 適用場景 | 停機(jī)時(shí)間 |
---|---|---|
邏輯備份與還原 | 中小型數(shù)據(jù)庫,例如小于 100 GB 支持跨平臺(tái)數(shù)據(jù)遷移 |
取決于數(shù)據(jù)庫的大小 |
pg_upgrade 工具 | 大中型數(shù)據(jù)庫,例如大于 100 GB 本機(jī)就地升級(jí) |
幾分鐘 |
邏輯復(fù)制 | 大中型數(shù)據(jù)庫,例如大于 100 GB 跨平臺(tái)支持 |
幾秒鐘 |
是的
📝如果使用廠商提供的 PostgreSQL 定制版本,也可能通過他們提供的工具實(shí)現(xiàn)版本升級(jí),具體參考相關(guān)文檔。
注意事項(xiàng):升級(jí)主要版本通過會(huì)導(dǎo)致用戶可見的不兼容性,因此應(yīng)用程序可能需要進(jìn)行相應(yīng)的修改。具體的變化可以參考發(fā)行說明,尤其是“Migration”部分的內(nèi)容;如果跨多個(gè)主要版本進(jìn)行升級(jí),需要閱讀每個(gè)中間版本的發(fā)行說明。
傳統(tǒng)的跨版本升級(jí)方法利用 pg_dump/pg_dumpall 邏輯備份導(dǎo)出數(shù)據(jù)庫,然后在新版本中通過 pg_restore 進(jìn)行還原。導(dǎo)出舊版本數(shù)據(jù)庫時(shí)推薦使用新版本的 pg_dump/pg_dumpall 工具,可以利用最新的并行導(dǎo)出和還原功能,同時(shí)可以減少數(shù)據(jù)庫膨脹問題。
邏輯備份與還原非常簡單但速度比較慢,停機(jī)時(shí)間取決于數(shù)據(jù)庫的大小,因此適合中小型數(shù)據(jù)庫的升級(jí)。
下面我們介紹這種升級(jí)方法的具體操作,假如當(dāng)前 PostgreSQL 軟件的安裝目錄位于 /usr/local/pgsql,同時(shí)數(shù)據(jù)目錄位于 /usr/local/pgsql/data,我們?cè)谕慌_(tái)服務(wù)器上進(jìn)行升級(jí)。
執(zhí)行邏輯備份之前停止應(yīng)用程序,確保沒有數(shù)據(jù)更新,因?yàn)閭浞蓍_始后的更新不會(huì)被導(dǎo)出。如有必要,可以修改 /usr/local/pgsql/data/pg_hba.conf 文件禁止其他人訪問數(shù)據(jù)庫。
然后備份數(shù)據(jù)庫:
pg_dumpall > outputfile
網(wǎng)友評(píng)論