PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動(dòng)問題排查 一、問題 數(shù)據(jù)庫斷電后,啟動(dòng)PG數(shù)據(jù)庫后無法正常啟動(dòng),報(bào)”psql: could not connect to server: No such file or directory”的錯(cuò)誤,錯(cuò)誤圖片如下: 二、背景分析 數(shù)據(jù)庫是單機(jī)版,使用k8s進(jìn)行部署運(yùn)
PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動(dòng)問題排查
一、問題
數(shù)據(jù)庫斷電后,啟動(dòng)PG數(shù)據(jù)庫后無法正常啟動(dòng),報(bào)”psql: could not connect to server: No such file or directory”的錯(cuò)誤,錯(cuò)誤圖片如下:
二、背景分析
數(shù)據(jù)庫是單機(jī)版,使用k8s進(jìn)行部署運(yùn)行在指定節(jié)點(diǎn),數(shù)據(jù)目錄掛服務(wù)器的指定目錄。在數(shù)據(jù)中心機(jī)房部署了兩套k8s集群,但是pod網(wǎng)絡(luò)未規(guī)劃好,兩個(gè)集群pod網(wǎng)段有重復(fù)導(dǎo)致兩個(gè)集群之間的pod概率性的發(fā)生地址沖突。在發(fā)生ip重復(fù)了后修改了我方使用的k8s集群的pod網(wǎng)段,并對(duì)所有pod進(jìn)行了重啟,在執(zhí)行重啟操作后我方部署pg數(shù)據(jù)庫無法正常提供服務(wù),經(jīng)過查詢?nèi)萜魅罩景l(fā)現(xiàn)了上述問題。
三、解決過程
① 根據(jù)日志進(jìn)入容器查看文件是否存在
kubectl exec -it -n namespace contairnerId /bin/sh
進(jìn)入容器后發(fā)現(xiàn)/var/run/postgresql/.s.PGSQL.5432文件不存在,然后進(jìn)入一個(gè)正常的pg數(shù)據(jù)庫容器,發(fā)現(xiàn)該文件是存在的,因此確認(rèn)pg數(shù)據(jù)庫的進(jìn)程不正常。
② 查看pg數(shù)據(jù)庫進(jìn)程是否存在
cat /var/lib/postgresql/11/main/master.pid
查看后結(jié)果和含義如下:
1)154->數(shù)據(jù)庫的主進(jìn)程號(hào),可以通過ps -ef | grep postgres來查詢,同時(shí)與/var/run/postgresql/11-main.pid里的值一致。
2)/var/lib/postgresql/11/main->數(shù)據(jù)庫的數(shù)據(jù)目錄
3)1724468744->數(shù)據(jù)庫的啟動(dòng)時(shí)間,需要進(jìn)行轉(zhuǎn)換
4)5432->數(shù)據(jù)庫端口號(hào)
5)/var/run/postgresql->PostgreSQL 的 Unix 域套接字目錄
然后通過執(zhí)行top命令,發(fā)現(xiàn)pg數(shù)據(jù)庫的進(jìn)程并未啟動(dòng),因此進(jìn)一步確認(rèn)pg數(shù)據(jù)庫未正常啟動(dòng)。
③ 重新啟動(dòng)pg數(shù)據(jù)庫進(jìn)程,發(fā)現(xiàn)問題原因
執(zhí)行以下命令啟動(dòng)數(shù)據(jù)庫:
./usr/lib/postgresql/11/bin/pg_ctl /var/lib/postgresql/11/main start
執(zhí)行完以后在當(dāng)前屏幕輸出有“invalid primary checkpoint record”等字樣,翻譯之后就是檢查點(diǎn)損壞的意思。
④ 修復(fù)檢查點(diǎn)
使用數(shù)據(jù)庫自帶工具對(duì)檢查點(diǎn)進(jìn)行修復(fù),進(jìn)入數(shù)據(jù)庫容器,切換到postgres用戶,使用PG自帶工具修復(fù),執(zhí)行命令如下:
./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main
修復(fù)完后啟動(dòng)數(shù)據(jù)庫進(jìn)程:
/usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start
再通過navicat工具連可正常訪問數(shù)據(jù)庫了。
四、總結(jié)
原因定位:異常重啟或斷電異常了數(shù)據(jù)文件損壞,pg數(shù)據(jù)重啟后在加載數(shù)據(jù)文件時(shí)發(fā)現(xiàn)檢查點(diǎn)損壞,無法正常啟動(dòng)。
解決方法:使用pg自帶工具進(jìn)行檢查點(diǎn)修復(fù):
1) 進(jìn)入數(shù)據(jù)庫容器,切換到postgres用戶;
2) 找到pg_resetwal工具,對(duì)指定數(shù)據(jù)文件進(jìn)行修改,以下是本次修改的命令
./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main
3) 啟動(dòng)數(shù)據(jù)庫
./usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start
小編推薦閱讀
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)