zoukankan      html  css  js  c++  java
  • 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 吧!!!

  • 相关阅读:
    MySql 踩坑小记
    Redux 实现过程的推演
    正则表达式的一些探索(偏JavaScript)
    [python工具] 如何使用plotly制作散列图
    使用epoll实现一个udp server && client
    python 实现一个简单tcp epoll socket
    [原创]差分放大器阻抗匹配计算+阻抗计算小工具
    将博客搬至CSDN
    [转]谈NAND Flash的底层结构和解析
    [原创]Fashion汽车定位器拆解
  • 原文地址:https://www.cnblogs.com/chenfool/p/5332408.html
Copyright © 2011-2022 走看看