Postgresql 大小版本升級

文章結構以下:sql

Postgresql是一個很是活躍的社區開源項目,更新速度很快,每一次版本的更新都會積極的修復舊版本的BUG,性能上也會有不一樣幅度的提高。10以前的版本由三部分組成,10開始只有兩部分數字組成。數據庫

 

1. 小版本升級

Postgresql每次的小版本升級不會改變內部的存儲格式,也不會改變數據目錄,而且老是向上兼容同一主版本,9.6.29.6.1老是兼容的。升級小版本只須要安裝新的可執行文件,而且重啓數據庫實例。服務器

① 備份佈局

能夠進行數據庫備份pg_dump備份post

② 關閉數據庫服務器性能

pg_ctl stop -D /pgsql/pg_data/測試

 

cd /usr/local/ui

mv pgsql/ pgsqlbakspa

 

postgresql9.6.8 上傳到目錄/usr/local/src並解壓3d

 

mkdir -p /usr/local/pgsql

cd /usr/local/src/postgresql

./configure --with-ossp-uuid --prefix=/usr/local/pgsql

 

gmake world

gmake install-world

 

 

 

③ 安裝完後,直接啓動數據庫

pg_ctl start -D /pgsql/pg_data/

 

 

啓動後,數據查詢成功。

 

 

 

2. 大版本升級

大版本能夠用pg_dumpall pg_upgrade進行升級,主要是將pg_upgrade升級。

pg_upgrade(之前稱爲pg_migrator)容許將存儲在PostgreSQL數據文件中的數據升級到更高版本的PostgreSQL主版本,而不須要主要版本升級所需的數據轉儲/重載,例如從8.4.7升級到PostgreSQL的當前主要版本。次要版本升級不須要,例如從9.0.19.0.4

主要的PostgreSQL版本會按期添加新功能,這些功能一般會改變系統表的佈局,但內部數據存儲格式不多會發生變化。pg_upgrade經過建立新的系統表並簡單地重用舊的用戶數據文件來使用此事實來執行快速升級。若是將來的主要版本以一種使舊數據格式不可讀的方式更改數據存儲格式,則pg_upgrade將沒法用於此類升級。(社區將試圖避免這種狀況。)

pg_upgrade盡力確保舊的和新的集羣是二進制兼容的,例如經過檢查兼容的編譯時設置,包括32/64位二進制文​​件。重要的是,任何外部模塊也是二進制兼容的,儘管pg_upgrade沒法檢查。

pg_upgrade支持從8.4.X及更高版本升級到PostgreSQL的當前主要版本。

有一些外部擴展要求在升級以前先升級舊版本的外部擴展,例如GIS

 

一.使用upgrade 普通模式升級

 

1) 安裝新版的PG並初始化數據目錄

把新版本的包上傳到/usr/local/src目錄 root 執行如下命令

mkdir -p /usr/local/pgsql10

cd /usr/local/src/

tar -zxvf postgresql-10.8.tar.gz

./configure --with-ossp-uuid --prefix=/usr/local/pgsql10

gmake world

gmake install-world

 

mkdir -p /pgsql/pg_data10

mkdir -p /pgsql/pg_archive10

mkdir -p /pgsql/pg_log10

chown -R postgres:postgres /pgsql/pg_data10

 

su - postgres

export PGHOME=/usr/local/pgsql10

export PGDATA=/pgsql/pg_data10

 

初始化後不能啓動新的庫。

 

/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W

 

 

查看安裝的目錄:

 

 

2) 中止舊版本的數據庫

pg_ctl stop -D /pgsql/pg_data/ -m fast

 

3) 檢查兼容性

爲了不數據庫升級失敗形成的長時間宕機,升級以前都作兼容性檢查。

 

 

檢查語句:

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c

 

 

能夠查看已經經過兼容性測試。

值得注意的是pg10跟以前的版本hash 索引結構不同,升級以後須要重建hash索引。

 

4) 使用PG_UPGRADE普通模式升級

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data -D /pgsql/pg_data10/

 

 

 圖片中提示,若是升級失敗,必須從新初始化新的數據庫纔可以繼續進行升級,本次實驗中升級成功。

修改postgresql.conf,pg_hba.conf 參數

 

 

 

開啓後,檢查數據庫是否正常運行以及有無報錯。

 

二.使用upgrade link模式升級

一樣的也是前期準備工做同樣,初始化數據庫:

把新版本的包上傳到/usr/local/src目錄 root 執行如下命令

mkdir -p /usr/local/pgsql10

cd /usr/local/src/

tar -zxvf postgresql-10.8.tar.gz

./configure --with-ossp-uuid --prefix=/usr/local/pgsql10

gmake world

gmake install-world

 

mkdir -p /pgsql/pg_data10

mkdir -p /pgsql/pg_archive10

mkdir -p /pgsql/pg_log10

chown -R postgres:postgres /pgsql/pg_data10

 

su - postgres

export PGHOME=/usr/local/pgsql10

export PGDATA=/pgsql/pg_data10

 

/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W

 

初始化後不能啓動新的庫。

1) 瞭解舊版本有那些extension以及表空間

 

2) 檢查兼容性

檢查語句:

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c

 

 

3) 使用PG_UPGRADE link模式升級

若是使用了hash 索引,須要重建索引升級完成後(升級的過程當中,索引會變爲不可用)

 

關閉舊的數據庫:

/usr/local/pgsql/bin/pg_ctl stop -D /pgsql/pg_data -m fast

 

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin -B /usr/local/pgsql10/bin -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k

 

 

其中提示,若是想用舊版本,須要把/pgsql/pg_data/global/pg_control.old命名爲/pgsql/pg_data/global/pg_control

 

例如測試:

mv /pgsql/pg_data/global/pg_control.old /pgsql/pg_data/global/pg_control

/usr/local/pgsql/bin/pg_ctl start -D /pgsql/pg_data

 

 

仍是能夠啓動使用之前的數據庫。

 

因爲本次是使用新的版本:

mv /pgsql/pg_data/global/pg_control /pgsql/pg_data/global/pg_control.old

 

啓動新的實例。(新的實例端口爲5433

pg_ctl start -D /pgsql/pg_data10/

手動收集統計信息:

/usr/local/pgsql10/bin/vacuumdb -a --analyze-in-stages -h127.0.0.1 -p5433

 

 

9版本新的庫升級成功,而且開啓後,舊的仍然可以經過修改pg_control.old後啓動。

貌似10的舊版本

相關文章
相關標籤/搜索