操作場景
升(sheng)級(ji)RDS for PostgreSQL引擎大版本(ben),能讓您享受到RDS for PostgreSQL新版本(ben)帶(dai)來的(de)功能、性能、安全的(de)提(ti)升(sheng)。但大版本(ben)升(sheng)級(ji)可能存在向后不(bu)兼(jian)容的(de)數據變更,可能導致現有業(ye)務運行不(bu)兼(jian)容。因(yin)此需(xu)要(yao)用戶使(shi)用目標版本(ben)測試確保業(ye)務能夠正常運行后,再執行大版本(ben)升(sheng)級(ji)。
本章節中(zhong)“源數據(ju)(ju)庫(ku)”表示待升(sheng)級的(de)低版本RDS for PostgreSQL數據(ju)(ju)庫(ku),“目標(biao)數據(ju)(ju)庫(ku)”表示待升(sheng)級到的(de)高(gao)版本RDS for PostgreSQL數據(ju)(ju)庫(ku)。
RDS for PostgreSQL版本號說明
RDS for PostgreSQL v10及其以上版(ban)本(ben)的(de)版(ban)本(ben)號(hao)(hao)(hao)由major.minor組成。其中(zhong),major表示大(da)版(ban)本(ben)號(hao)(hao)(hao),minor表示小版(ban)本(ben)號(hao)(hao)(hao)。大(da)版(ban)本(ben)升級是指major部分增加,比如:11.x升級到12.x。
RDS for PostgreSQL v10之前的版(ban)本(ben)(ben)號(hao)由major.major.minor組成(cheng)。其中(zhong),major.major表(biao)示大(da)版(ban)本(ben)(ben)號(hao),minor表(biao)示小(xiao)版(ban)本(ben)(ben)號(hao)。大(da)版(ban)本(ben)(ben)升(sheng)級是指如major.major部分增加,比如:從9.5.x升(sheng)級到9.6.x或者從9.x.x升(sheng)級到10.x。
準備工作
1. 查看待升級的云數據庫 RDS for PostgreSQL實例信(xin)息(xi)。
a. 在“實例管理”頁面(mian)(mian),單(dan)擊待(dai)升(sheng)級實例名稱,進入待(dai)升(sheng)級實例基本(ben)信息頁面(mian)(mian)。
b. 在“基本信息(xi)”頁面中,可以查看到實(shi)例所屬區(qu)域、可用區(qu)、虛擬(ni)私有云、子網、安全組。
2. 準備彈性云主(zhu)機。
通過(guo)彈性云主機連接關系(xi)型(xing)數據庫實例(li),需要創建(jian)一臺彈性云主機。
該彈(dan)性云(yun)主(zhu)機的區(qu)域、可(ke)用區(qu)、虛擬(ni)私(si)有云(yun)、子網(wang)、安全組(zu)與(yu)待(dai)升級(ji)RDS for PostgreSQL實例相同(tong)。
3. 在(zai)2中的彈性云(yun)主機上(shang),安(an)裝PostgreSQL客戶端。
說明
該(gai)彈性云主(zhu)機需要安裝和RDS for PostgreSQL數據(ju)(ju)庫(ku)服務(wu)端相同(tong)版(ban)本的(de)數據(ju)(ju)庫(ku)客(ke)戶端,PostgreSQL數據(ju)(ju)庫(ku)或客(ke)戶端會(hui)自帶pg_dump、pg_restore和psql工具。
4. 參考通過內網連(lian)接RDS for PostgreSQL實例(Linux方式)連(lian)接源數據庫(ku),在每一個數據庫(ku)上執(zhi)行如下sql,獲取已使用列表。
select extname from pg_extension;
5. 根據(ju)查看的已(yi)使用列表,選擇一個包含當前所有(you)插件的目標升(sheng)級版本(ben)。
RDS for PostgreSQL各版本支持的插件,參考支持的插件列表。
6. 參考創建參數模板,創建一(yi)個(ge)兼容待升級(ji)實例參數的目標版(ban)本參數模板。
7. 創建(jian)目(mu)標版本(ben)RDS for PostgreSQL實例。
? 創(chuang)建RDS for PostgreSQL實例,請(qing)參見步驟一:購買實例。
? 目標(biao)版本RDS for PostgreSQL實(shi)例所屬區域(yu)、可用區、虛擬私有云、子網(wang)、安全組與源實(shi)例相同。
8. 在2中(zhong)的彈性云(yun)主機上,參(can)考通過內網連接RDS for PostgreSQL實(shi)例(li)(Linux方式),確認目標實(shi)例(li)連接正常。
操作步驟
以下操(cao)作均在已準備的彈性云(yun)主機上執行(xing)。
步驟 1 使用psql連接(jie)源(yuan)數(shu)據(ju)庫,執行以下sql,獲取數(shu)據(ju)庫列表。
postgres=# \l
步驟 2 使用(yong)psql連接目(mu)標(biao)(biao)數據庫,執行以下(xia)sql,確認(ren)步驟(zou)1中的所有數據庫在(zai)目(mu)標(biao)(biao)數據庫中是(shi)否均(jun)存在(zai)。
postgres=# \l
存在,執行步驟(zou)3。
不存在,執行以下sql創建缺失的數據庫(ku),然后(hou)執行步驟3。
postgres=# create database my_target_db;
說明
模板庫template0、template1不需要遷移(yi)。
默認創建(jian)的(de)數據(ju)庫postgres,一般不會存(cun)放業(ye)務(wu)數據(ju),也(ye)不需(xu)要(yao)遷移(yi)。但是(shi)如(ru)果存(cun)放了業(ye)務(wu)數據(ju),也(ye)需(xu)要(yao)遷移(yi)。
步驟 3 使(shi)(shi)用pg_dump轉(zhuan)儲(chu)源數據庫,并使(shi)(shi)用pg_restore恢復到(dao)目標數據庫。針對每一個業(ye)務庫,重復執行(xing)步驟3~步驟4。
對于除RDS for PostgreSQL 11外的其(qi)他版本,轉(zhuan)儲(chu)命(ming)令如下:
pg_dump -Fc -v --host=source_IP --port=source_port --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db
對于RDS for PostgreSQL 11版(ban)本,轉儲(chu)命令如下:
pg_dump -Fc -v --host=source_IP --port=source_port -Ndbms_lob -Ndbms_output -Ndbms_random -Nsys -Nutl_raw -Npg_catalog --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db
說明
pg_dump所使用(yong)的(de)登錄用(yong)戶需要擁有(you)(you)訪問該數據庫所有(you)(you)對(dui)象的(de)權限(xian)。
pg_restore所使用(yong)的登錄用(yong)戶需要擁有該(gai)數據(ju)庫(ku)的所有操(cao)作權限。
授權操作請參考grant。
若pg_dump命令使用(yong)-N參數,blob對象不(bu)會被導出。
若(ruo)pg_dump命令使用-Fc參數,則導(dao)出的文件(jian)格式為(wei)二(er)進制格式,如果(guo)需要(yao)導(dao)出sql類型的文件(jian)請使用-Fp參數。
步驟 4 每遷(qian)移完一個數(shu)據(ju)庫,就可以(yi)通過目標數(shu)據(ju)庫測(ce)試相應業(ye)務,保證業(ye)務在(zai)目標數(shu)據(ju)庫中(zhong)運行正常。
步驟 5 請務(wu)(wu)必確保驗證業(ye)(ye)務(wu)(wu)可以在目(mu)(mu)標庫正常(chang)運行后(hou),再將業(ye)(ye)務(wu)(wu)切換到(dao)目(mu)(mu)標數(shu)據(ju)庫,然后(hou)刪除源數(shu)據(ju)庫。
----結束