pgsql如何重啟


正常情況下,pgsql 停止可以執行一下命令:

bin/pg_ctl stop -s -D pg_data/ -m fast

此命令和 kill -15 PID 效果相同

但是有時候 pgsql 也會抽風,無法通過正常的方式停止,這個時候我們就需要暴力拆解了

kill -9 PID 大法,沒有什么進程是可以抵抗的(除了用戶權限不對外,基本是遇神殺神,遇佛殺佛哦)

但是kill -9 這個方式太暴力,導致pgsql 在下次啟動時,會爆出亂七八糟的錯誤

例如 PID 已存在的問題

FATAL:  pre-existing shared memory block (key 4432001, ID 1245189) is still in use
HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "post
master.pid".

解決方式是將 pg_data/postmaster.opts 和 pg_data/postmaster.pid 兩個文件刪除
因為pgsql 在啟動時,會去檢測是否存在這兩個文件


另外在kill -9 強殺進程時,有時候也會誤傷數據庫的日志文件,這個時候,就會出現以下的問題

LOG:  database system was interrupted; last known up at 2016-03-23 10:55:25 CST
LOG:  invalid record length at 0/1A97600
LOG:  invalid primary checkpoint record
LOG:  invalid record length at 0/1A97598
LOG:  invalid secondary checkpoint record
PANIC:  could not locate a valid checkpoint record
LOG:  startup process (PID 2348) was terminated by signal 6: Aborted
LOG:  aborting startup due to startup process failure

解決方式如下
bin/pg_resetxlog -f pg_data/
這個命令應該是恢復pgsql 的日志,有可能會造成pgsql 里面的數據丟失或者損壞,但是你在kill -9 時就應該了解這個風險。

否則呢,你就自己想明白為啥不能 kill -15 吧!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM