windows上upgrade postgres

一、背景

更新前使用的postgres版本是9.3版本,官方不再支持了. 基於IT安全的要求,需要升級到更高版本,於是打算升級到10.11版本

升級生產環境的數據庫版本,一定得慎重再慎重,不然隨便出了一點小問題,線上的應用就沒辦法使用了,而我也是一次升級Postgres,就更加得小心翼翼了. 首先,肯定得參考官方文檔,然後在自己的服務器上做測試

在實際操作中,由於是第一次更新數據庫,所以遇到的問題還是挺多的,花費了大量時間,因此記錄下,也給之後需要升級postgres的同學們排坑!需要注意的是:雖然我測試了幾遍數據庫更新的過程,但是在實際更新時,還是存在各種各樣的問題,導致更新花了很長時間,所以這類升級操作需要在週末進行(也就是免費加班,啊哈哈哈)


二、更新步驟

需要說明的是,postgres升級和一般的軟件升級有點不同,一般的軟件升級都是直接進行升級,而postgres相當於是安裝一個新版本,然後將舊版本的數據遷移到新版本中. 因爲postgres部署在windows服務器上,所以相比於部署到linux服務器上更加的麻煩

1.下載10.11版本的postgres

2.停掉老版本的postgres,並安裝新版本的postgres( 如果不停掉老版本的postgres,新版本在安裝時,端口會存在問題,安裝過程其實是一個初始化過程,也可以使用命令去初始化),安裝成功後停掉postgres服務(安裝成功會自動註冊到service中)

3.將兩個版本的/data/pg_hba.conf文件設置爲不需要密碼(防止會報密碼相關的錯誤)

host    all             all             127.0.0.1/32            trust

將md5改成trust,注意不要寫成大寫的

4.使用新版本的pg_upgrade命令來遷移數據庫

在windows下還需要創建postgres用戶,並給postgres用戶修改目錄的權限,在執行以下命令時,要在windows上切換成postgres用戶,具體可以查看官方文檔

cd 新版本/bin/

./pg_upgrade.exe -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir

5.遷移成功後,將/data/pg_hba.conf文件改回來,並啓動新版本的postgres服務

./pg_ctl.exe -D ../data start

在服務啓動後,再查看相關的應用是否有受到影響,沒受到影響的話,就代表本次更新成功了;就步驟而言,看上去比較簡單,但是在實際操作中,難免會遇到各種問題,下面就記錄下我遇到的問題以及解決方案


三、遇到的問題以及解決

1.報錯connection to database failed: fe_sendauth: no password supplied

這是由於需要密碼認證導致的, 修改/data/pg_hba.conf文件,將md5改成trust即可

2.報錯The source cluster was not shut down cleanly.

這是由於postgres沒有被完全關閉導致的,一般遇到的概率比較小,在關閉時可以使用如下命令即可

./pg_ctl.exe  -D ../data/ stop -s -m fast

3.權限問題

由於本次是在windows下更新postgres,所以還需要註冊postgres用戶,並給postgres用戶相應的權限(也試過不創建用戶,通過腳本來操作,但是貌似不行);所以建議大家按照官方文檔來操作,我開始是使用 git base來按照linux命令來更新的,花了好多時間都沒更新成功,最後還是按照官方文檔來了,成功更新了

4.日誌查看

在使用pg_upgrade命令進行更新時,會在執行命令的當前目錄下產生四個日誌文件,裏面會存儲報錯信息,如果出現更新失敗的話,就看下這四個日誌文件,然後解決下錯誤即可

5.遇到報錯“xx/data/base : No such file or directory”

這是由於執行命令的用戶沒有base目錄的權限導致的,給該用戶base目錄權限即可解決問題


微信公衆號: DevOps入門指南

大家關注下微信公衆號!另外,新建了一個微信羣,主要是devops/ci/cd相關的話題討論以及問題解決方案。大家感興趣的話可以加微信:crazy_boy-smile

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章