欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker環(huán)境下升級PostgreSQL的步驟方法詳解

 更新時間:2021年01月08日 10:41:08   作者:exxxxia  
這篇文章主要介紹了Docker環(huán)境下升級PostgreSQL的步驟方法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前段時間接到了要升級數(shù)據(jù)庫的需求,在公司大佬的指導下搞定了升級的方案,在此記錄一下。

查閱PostgreSQL 官方文檔 可以得知,官方提供了兩種方式對數(shù)據(jù)庫進行升級——pg_dumpall與pg_upgrade。

pg_dumpall 是將數(shù)據(jù)庫轉(zhuǎn)儲成一個腳本文件,然后在新版數(shù)據(jù)庫中可以直接導入。這種方式操作簡單,跟著官方文檔就能輕松操作,但是明顯只適用于數(shù)據(jù)量較少的情況,在我的測試環(huán)境里,導入一個2g的數(shù)據(jù)庫用了將近10分鐘。

所以我這里選用的是 pg_upgrade ,這種方式是直接將數(shù)據(jù)文件升級到高版本,2g數(shù)據(jù)用時一分多鐘。

目前我手上的項目的PgSql是跑在在Docker上面的,版本是10.x,需求是升級到13.x,簡單講一下步驟:

  • _upgrade需要用到新舊容器的bin跟data,所以首先將舊數(shù)據(jù)庫容器的bin還有data文件復制到服務器;
  • 開啟一個PG13的容器,這個是后面用于服務的正式容器(下文稱為正式容器),然后另外開啟一個臨時容器(下文稱為臨時容器)用于升級數(shù)據(jù)文件,將這兩個容器的數(shù)據(jù)庫目錄映射到同一個目錄;
  • PG13的容器內(nèi)部會缺少很多PG10的運行庫,所以需要從舊容器中復制到臨時容器里;
  • 臨時容器將數(shù)據(jù)升級后,由于跟正式容器的數(shù)據(jù)文件目錄映射到了同一個目錄,所以數(shù)據(jù)可以正常使用;于跟正式容器的數(shù)據(jù)文件目錄映射到了同一個目錄,所以數(shù)據(jù)可以正常使用;

首先自然是拉取一個PG13的鏡像,然后放好別動:

docker pull postgres:13.1

創(chuàng)建升級目錄:

#創(chuàng)建備份目錄
mkdir /db_update/new_data

cd /db_update

#將舊數(shù)據(jù)庫容器的bin跟data復制出來
docker cp pgdb:/usr/local old_bin
docker cp pgdb:/usr/local old_share
docker cp pgdb:/var/lib/postgresql/data old_data

#授權(quán)
chmod -R 777 /db_update/old_data

此時目錄結(jié)構(gòu)應該是這樣的:

#新建一個正式容器,并映射data目錄,初始化完成后ctrl+c 退出
 docker run --name="pg13_new" -v "/db_update/new_data:/var/lib/postgresql/data/pgdata" -e POSTGRES_USER=dbuser -e POSTGRES_PASSWORD=123456 -e PGDATA=/var/lib/postgresql/data/pgdata postgres:13.1

 #新建一個臨時容器,用于升級數(shù)據(jù),映射PG10的bin跟data目錄,容器內(nèi)的data跟正式容器映射到同一個目錄
 docker run -dti --name="tmp" -v $(pwd)/old_bin:/usr/lib/postgresql/10 -v $(pwd)/old_share:/usr/share/postgresql/10 -v $(pwd)/new_data:/data/new_data -v $(pwd)/old_data:/data/old_data -e PGDATA:/data/new_data --privileged=true postgres:13.1 /bin/bash

容器創(chuàng)建完畢先放著,接下來做別的操作。在PG13內(nèi)會缺失不少PG10所需運行文件(血淚教訓),可以從舊容器將相關(guān)文件復制過來。

#將舊容器的文件復制到本機
docker cp pgdb:/usr/lib /old_lib
docker cp pgdb:/lib /old_lib2

此時的目錄結(jié)構(gòu):

#將文件復制到升級容器
docker cp /old_lib tmp:/old_lib
docker cp /old_lib2 tmp:/old_lib2

#將文件復制到對應目錄
docker exec -it tmp /bin/bash
cp /old_lib/* /usr/lib/x86_64-linux-gnu/
cp /old_lib/* /usr/lib
cp /old_lib2/* /lib

將文件復制完畢后即可以嘗試升級數(shù)據(jù)庫,不過仍有可能出現(xiàn)缺少運行庫的問題,同時也會有權(quán)限的問題,下面會展示如何解決這兩個問題。

#切換數(shù)據(jù)庫用戶
su -postgres

#檢查是否可以升級,一連串的ok即表示可以執(zhí)行數(shù)據(jù)庫文件的升級
/usr/lib/postgresql/13/bin/pg_upgrade -b /usr/lib/postgresql/10/bin -B /usr/lib/postgresql/13/bin -d /data/old_data -D /data/new_data -U dbuser -p 5433 -P 5434 -c

如果出現(xiàn)下圖的提示,那就是權(quán)限問題,授權(quán)一下即可解決。

解決方法:

#在root用戶下執(zhí)行
chown -R postgres/data/old_data

如果之后包權(quán)限錯誤 需權(quán)限 0700 則再執(zhí)行
chmod -R 0700 /data/old_data

再次執(zhí)行檢查升級命令,錯誤也再次出現(xiàn):

已經(jīng)很多個ok了,所以別慌,執(zhí)行more pg_upgrade_server.log可以查看具體錯誤

圖中可以看出缺少了libstdc++.so.6這個文件,我們可以手動從舊容器里獲取這個文件復制到臨時容器里面去。

#新打開一個shell 窗口
cd /var/lib/docker/overlay2
#這條命令會顯示多個目錄的路徑,選擇其中之一就行了
find -name libstdc++.so.6
#創(chuàng)建一個文件夾
mkdir /old_lib3
#將庫文件復制過去
cp ./0928cba045d2d4cabf1f02fc2d4007e302c925393131c743390dc2266e0f1353/diff/usr/lib/x86_64-linux-gnu/libstdc++.so.6 /old_lib3
#復制到容器
docker cp /old_lib3/ tmp:/old_lib3/
docker exec -it tmp /bin/bash
cp /old_lib3/* /usr/lib/x86_64-linux-gnu/

完成上面的步驟后,再次檢查是否可升級:

看到這一連串ok并且沒有返回錯誤即代表可以正常升級,如果仍然有錯誤,可以重復上述步驟。

執(zhí)行升級:

/usr/lib/postgresql/13/bin/pg_upgrade -b /usr/lib/postgresql/11/bin -B /usr/lib/postgresql/13/bin -d /data/old_data -D /data/new_data -U dbuser

至此數(shù)據(jù)庫文件升級完成。

升級完成之后將 new_data目錄按照正常的數(shù)據(jù)庫目錄映射到 docker postgres:13.1 容器 啟動即可。

到此這篇關(guān)于Docker環(huán)境下升級PostgreSQL的方法的文章就介紹到這了,更多相關(guān)Docker環(huán)境升級PostgreSQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL HOT與PHOT有哪些區(qū)別

    PostgreSQL HOT與PHOT有哪些區(qū)別

    這篇文章主要介紹了PostgreSQL8.3版本開始就引入的HOT機制與PHOT使用區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • postgresql rank() over, dense_rank(), row_number()用法區(qū)別

    postgresql rank() over, dense_rank(), row_number()用法區(qū)別

    這篇文章主要介紹了postgresql rank() over, dense_rank(), row_number()的用法區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項

    關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項

    PostgreSQL和MySQL是兩種流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它們都可以用來存儲和管理數(shù)據(jù),但是它們在某些方面有所不同,下面這篇文章主要給大家介紹了關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • postgresql的jsonb數(shù)據(jù)查詢和修改的方法

    postgresql的jsonb數(shù)據(jù)查詢和修改的方法

    這篇文章主要介紹了postgresql的jsonb數(shù)據(jù)查詢和修改的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Postgresql中json和jsonb類型區(qū)別解析

    Postgresql中json和jsonb類型區(qū)別解析

    在我們的業(yè)務開發(fā)中,可能會因為特殊【歷史,偷懶,防止表連接】經(jīng)常會有JSON或者JSONArray類的數(shù)據(jù)存儲到某列中,這個時候再PG數(shù)據(jù)庫中有兩種數(shù)據(jù)格式可以直接一對多或者一對一的映射對象,接下來通過本文介紹Postgresql中json和jsonb類型區(qū)別,需要的朋友可以參考下
    2024-06-06
  • Postgresql自定義函數(shù)詳解

    Postgresql自定義函數(shù)詳解

    這篇文章主要介紹了Postgresql自定義函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • postgresql查詢每個月的最后一天日期并對未查到的日期結(jié)果補0(操作示例)

    postgresql查詢每個月的最后一天日期并對未查到的日期結(jié)果補0(操作示例)

    這篇文章主要介紹了postgresql查詢每個月的最后一天日期,并對未查到的日期結(jié)果補0,pgsql需要使用函數(shù)使用date_trunc()函數(shù)找到指定月第一天,然后對該日期先加一個月在減一個月就能得到你傳給的日期的最后一天日期,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • springboot 沒法掃描到repository的解決

    springboot 沒法掃描到repository的解決

    這篇文章主要介紹了springboot 沒法掃描到repository的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql常用函數(shù)及使用方法大全(看一篇就夠了)

    Postgresql常用函數(shù)及使用方法大全(看一篇就夠了)

    使用函數(shù)可以極大的提高用戶對數(shù)據(jù)庫的管理效率,函數(shù)表示輸入?yún)?shù)表示一個具有特定關(guān)系的值,下面這篇文章主要給大家介紹了關(guān)于Postgresql常用函數(shù)及使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • PostgreSQL 數(shù)據(jù)同步到ES 搭建操作

    PostgreSQL 數(shù)據(jù)同步到ES 搭建操作

    這篇文章主要介紹了PostgreSQL 數(shù)據(jù)同步到ES 搭建操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論