關於PostgreSQL數據庫版本從9.2.24升級到PostgreSQL11.5的方案

一、 目的

     當前設備中使用的PostgreSQL數據版本是9.2.24 。 而PostgreSQL官方最新的版本是12.2。 已經迭代了三個大版本,中間每個大版本又有若干個次版本的迭代更新。在每次的迭代過程中,都有許多的隱藏缺陷修復以及性能的提升,包括CPU、內存佔用、磁盤讀寫、網絡I/O、索引邏輯等等。爲了提升設備中PostgreSQL數據庫的性能和減少佔用磁盤空間,現將舊版本的PostgreSQL9.2.24數據庫更替爲官方較穩定的PostgreSQL11.5版本。
     

二、 風險評估

     PostgreSQL數據庫大版本號之間的內部存儲關係發生了較大變化,因此主要的風險來自以下兩個:
     (1) 在數據庫升級之前,數據能否完整備份;以及數據庫成功升級後,是否會有丟失現象。
     (2) 備份的舊數據能否理想的作用於新版本的數據庫中。

     

三、 實施步驟

     PostgreSQL數據庫的升級方式共有三種:
          pg_dumpall
          pg_update
          觸發器複製

     上面三種方式各有優缺點,dump + restore方式是最爲可靠,通常速度上面也稍慢; pg_update對於要求較短的停機時間是個不錯選擇,通常僅需幾分鐘時間,甚至對於一個較大數據庫也是如此; 觸發器複製方式,時間最短,但是過程複雜且容易出問題。三種方式,各有千秋,具體採用哪一種,取決於你的需要。如果你渴望停機時間段,而且希望有保證,那麼pg_update是你的最佳選擇。反之,若對數據的可靠性要求高於停機時間,相信我,dump + restore絕對是你的不二之選。因此,本方案中採用第一種升級方式,即 dump + restor。
     

     第一步,備份PostgreSQL9.2.24數據庫中的舊數據。 當然,如PG11.5的數據庫集簇目錄和PG9.2.24不在同目錄,則可在安裝完成之後再備份也可;反之,則需要第一步進行備份,避免數據丟失。
     pg_dump -h 主機ip -p 端口 -U postgres 數據庫名 > 文件名

     

     第二步,安裝(源碼編譯安裝,或是公司提供的rpm鏡像包 )待升級的PostgreSQL版本(PostgreSQL11.5)到指定的目錄。本次安裝的指定目錄是:/home/PostgreSQLClient。
完成安裝後,該目錄下有如下四個目錄文件:bin、include、lib和share 。其中bin/目錄下存放了終端方式的PostgreSQL客戶端系列工具,如登錄數據庫psql、初始化數據庫集簇initdb、創建數據庫createdb、刪除數據庫dropdb等等。查看安裝後的PostgreSQL數據庫是否爲預期:
          [root@Thor bin]# ./psql --version
          psql (PostgreSQL) 11.5

     

     第三步,初始化數據庫集簇到指定的某目錄位置。本次指定的安裝目錄是:/home/PostgreSQLServer。該目錄主要用來存儲PostgreSQL服務的系統庫/表、用戶數據庫/表、索引文件、日誌文件等等。修改PostgreSQLSever/目錄權限,賦予postgres。
          [root@Thor MetadataServer]# chown -R postgres:postgres 集簇目錄
          [root@Thor MetadataServer]# chmod –R 數據庫集簇目錄
現在使用initdb命令來初始化數據庫集簇,如下:

su postgres -c '/home/PostgreSQLClient/bin/initdb -D /home/PostgreSQLServer'

     等待段時間(具體時間和系統硬件配置極其相關)後,終端會告知創建成功提示。
          waiting for server to start… done
          server started
     
     第四步,登錄數據庫,psql -p 數據庫端口 -U postgres。並且查看當前數據庫版本是否和預期一致。

metadata_test=# select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)
Time: 0.160 ms

     可以確認當前服務器版本是預期的PostgreSQL11.5。
     

     第五步,將備份文件中的數據庫表等數據導入到PostgreSQL11.5中的數據庫。注意,必須得現在PostgreSQL11.5上面創建一個空的待導入的數據庫名。
     psql -p 端口 -U postgres -h 主機ip –f 備份文件 數據庫名;

     
     第六步,重複第四步,登錄數據庫。分別查看其中的數據庫和數據表數量,以及每個表中的記錄(元組)總數是否和PostgreSQL9.2.24中的保持一致。此外數據記錄(元組)的屬性(字段)信息是否有差異。

四、 結果

     升級過後的11.5數據庫中數據庫表記錄和PostgreSQL9.2.24舊版本中的數據記錄保持一致,包括各表數據記錄總數,表索引方式等等。總體而言,數據的備份和導入任務是生效的。
     

五、 注意

     在備份數據庫表相關數據時候,支持以下三種方式: PostgreSQL9.2.24版本客戶端工具pg_dump備份數據,且該版本號的工具psql導入PostgreSQL11.5數據庫 ;PostgreSQL9.2.24版本工具pg_dump備份數據,PostgreSQL11.5版本工具psql導入PostgreSQL11.5數據庫;PostgreSQL11.5版本工具pg_dump備份數據, 且該版本工具psql導入到該版本的數據庫中。

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