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

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

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

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ò)誤圖片如下:

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

二、背景分析

數(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é)果和含義如下:

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

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

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

修復(fù)完后啟動(dòng)數(shù)據(jù)庫進(jìn)程:

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

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

再通過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

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

3) 啟動(dòng)數(shù)據(jù)庫

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

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

小編推薦閱讀

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

相關(guān)視頻攻略

更多

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

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(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)