您的位置:首頁 > 軟件教程 > 教程 > PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

來源:好特整理 | 時間:2024-08-25 10:20:38 | 閱讀:97 |  標(biāo)簽: 問 重啟 數(shù)據(jù)庫   | 分享到:

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查 一、問題 數(shù)據(jù)庫斷電后,啟動PG數(shù)據(jù)庫后無法正常啟動,報”psql: could not connect to server: No such file or directory”的錯誤,錯誤圖片如下: 二、背景分析 數(shù)據(jù)庫是單機版,使用k8s進行部署運

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

一、問題

數(shù)據(jù)庫斷電后,啟動PG數(shù)據(jù)庫后無法正常啟動,報”psql: could not connect to server: No such file or directory”的錯誤,錯誤圖片如下:

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

二、背景分析

數(shù)據(jù)庫是單機版,使用k8s進行部署運行在指定節(jié)點,數(shù)據(jù)目錄掛服務(wù)器的指定目錄。在數(shù)據(jù)中心機房部署了兩套k8s集群,但是pod網(wǎng)絡(luò)未規(guī)劃好,兩個集群pod網(wǎng)段有重復(fù)導(dǎo)致兩個集群之間的pod概率性的發(fā)生地址沖突。在發(fā)生ip重復(fù)了后修改了我方使用的k8s集群的pod網(wǎng)段,并對所有pod進行了重啟,在執(zhí)行重啟操作后我方部署pg數(shù)據(jù)庫無法正常提供服務(wù),經(jīng)過查詢?nèi)萜魅罩景l(fā)現(xiàn)了上述問題。

三、解決過程

① 根據(jù)日志進入容器查看文件是否存在

kubectl exec -it -n namespace contairnerId /bin/sh

進入容器后發(fā)現(xiàn)/var/run/postgresql/.s.PGSQL.5432文件不存在,然后進入一個正常的pg數(shù)據(jù)庫容器,發(fā)現(xiàn)該文件是存在的,因此確認(rèn)pg數(shù)據(jù)庫的進程不正常。

② 查看pg數(shù)據(jù)庫進程是否存在

cat /var/lib/postgresql/11/main/master.pid

查看后結(jié)果和含義如下:

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

1)154->數(shù)據(jù)庫的主進程號,可以通過ps -ef | grep postgres來查詢,同時與/var/run/postgresql/11-main.pid里的值一致。

2)/var/lib/postgresql/11/main->數(shù)據(jù)庫的數(shù)據(jù)目錄

3)1724468744->數(shù)據(jù)庫的啟動時間,需要進行轉(zhuǎn)換

4)5432->數(shù)據(jù)庫端口號

5)/var/run/postgresql->PostgreSQL 的 Unix 域套接字目錄

然后通過執(zhí)行top命令,發(fā)現(xiàn)pg數(shù)據(jù)庫的進程并未啟動,因此進一步確認(rèn)pg數(shù)據(jù)庫未正常啟動。

③ 重新啟動pg數(shù)據(jù)庫進程,發(fā)現(xiàn)問題原因

執(zhí)行以下命令啟動數(shù)據(jù)庫:

./usr/lib/postgresql/11/bin/pg_ctl /var/lib/postgresql/11/main start

執(zhí)行完以后在當(dāng)前屏幕輸出有“invalid primary checkpoint record”等字樣,翻譯之后就是檢查點損壞的意思。

④ 修復(fù)檢查點

使用數(shù)據(jù)庫自帶工具對檢查點進行修復(fù),進入數(shù)據(jù)庫容器,切換到postgres用戶,使用PG自帶工具修復(fù),執(zhí)行命令如下:

./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

修復(fù)完后啟動數(shù)據(jù)庫進程:

/usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

再通過navicat工具連可正常訪問數(shù)據(jù)庫了。

四、總結(jié)

原因定位:異常重啟或斷電異常了數(shù)據(jù)文件損壞,pg數(shù)據(jù)重啟后在加載數(shù)據(jù)文件時發(fā)現(xiàn)檢查點損壞,無法正常啟動。

解決方法:使用pg自帶工具進行檢查點修復(fù):

1) 進入數(shù)據(jù)庫容器,切換到postgres用戶;

2) 找到pg_resetwal工具,對指定數(shù)據(jù)文件進行修改,以下是本次修改的命令

./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

3) 啟動數(shù)據(jù)庫

./usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start

PG數(shù)據(jù)庫導(dǎo)致斷電/重啟無法正常啟動問題排查

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點或證實其描述。

相關(guān)視頻攻略

更多

掃二維碼進入好特網(wǎng)手機版本!

掃二維碼進入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)