問題起因:
前段時間客戶生產服務器,突然不小心弄斷電了,雖然運維人員重啓服務後,看似能正常訪問,但是出現主從無法正常同步數據問題,而重新啓動服務後,報could not connet to server。。。。postgresql/.s.PGSQL.5432,後臺日誌出現,accepting TCP/IP connections on port 5432等一串錯誤信息。突發性斷電導致異常終止,這是數據庫的postmaster.pid 文件仍健在,但是其實不起作用,在後臺數據庫日誌也可以看到如下錯誤信息,lock file "postmaster.pid" already exists,這時建議先cp 備份另存下,以防改錯,然後在直接mv postmaster.pid 遷移到其他地方 ,然後重啓數據庫服務,即可解決問題。而啓動的時候出現啓動失敗,具體情況請看《postgres啓動失敗問題分析與處理 》
原理分析:
當我們啓動PostgresSQL時,會在PostgreSQL中的數據文件夾生成postmaster.pid
文件,該文件主要是記錄啓動時對應的進程號等相關信息,如果該文件已經存在,在啓動時,會導致進程號無法對應,最終啓動失敗,原理如下:
1、26385: 代表Postgres主進程的PID
2、/home/postgresql_data: 代表數據目錄
3、5432: 代表數據庫監聽端口,在postgresql.conf中對應port = 5432
4、5432001 229376:代表的是共享內存的地址(shared memory segments中的key和shmid)。