skylove 发表于 2005-01-18 14:39

非法关机的时候,postgresql启动故障的解决(牢骚版)

今天,网关机被人强制关机了(某同事所为...至于你要问为什么非linux管理员的同事可以有权操作linux服务器,我只能告诉你--这是在中国,这是在中国的高校)
      然后呢,直接导致的结果就是postgresql 服务无法启动咯...我用了近10分钟的时间来解决这个替别人揩屁股的问题...
      我先尝试直接用service postgresql start来启动服务,失败咯...然后 tail /var/log/message 的结果,只是简单地告诉我了start postgresql faile....我靠,这还不如不说呢(典型的windows日志风格,告诉你一些完全正确却全无用处的消息)
      然后就上google,用关键字 postgreql 修复 作为关键字来查询,找到n多结果,但是没有我想要的...恩,看来只有自己想办法了.
      su 到 postgres身份,然后执行postmaster -D 数据库....无法启动,不过这次postger给出了错误提示如下:
   
   FATAL:pre-existing shared memory block (key 5432001, ID 0) is still in use
HINT:If you're sure there are no old server processes still running, remove the shared memory block with the command "ipcrm", or just delete the file "/var/lib/pgsql/data/postmaster.pid".
   
   恩,这样一来就明白了...原来是因为上次停止机器的时候,是直接关电...(可怜的...既然有那台机器的密码,就登陆进去reboot一下吧...这个命令我是有给他写过的啊),因此,postgresql运行进程的pid文件没有删除...而重新启动之后,在启动postgresql服务的时候,由于postgresql查询到pid文件的存在,以为服务已经启动起来了,为了不重新加载就不再启动自己了...
    既然原因找到了,那么就直接 把那个pid文件删除掉...之后再试,果然就正常咯...

   为了防止这样的悲剧再次重演,我惟有在/etc/rc.local里加上一条
   rm -rf /var/lib/pgsql/data/postmaster.pid 2 >; /dev/null
然后再启动postgresql服务...

   这段时间电信在调整网络,所以时常会出现偶尔无法上网或者服务器无法连出的情形.可惜同事总是太信任电信,而不相信我做的网关,于是傻到一而再再而三的重新启动网关...
   估计今天下午去,那同事又会问我"为什么旧区的服务器全部外界无法访问"的问题吧...拜托,服务器全部用公网ip地址,上级网关直接指向电信,本日内没有对任何服务器的网络设置做任何修改,突然全部外界无法联入,自然是电信那边调整出错导致的...怎么会是我一台内部网nat的网关的问题??难道这台普通配置的网关会有把其他同为公网ip的服务器一起down掉或者导致外界全都无法访问这么大的威力么???排除了唯一可能的arp欺骗和慢速路由攻击的问题(因为即使你在关掉我nat网关服务器的时候,其他的服务器不是外界也同样无法访问么,而当nat服务器一起,它又是能访问外界--但也不能被外界所访问),都到了这个地步,为什么还依然怀疑是我的那台可怜的nat有什么地方做得不够好,而不肯怀疑一下电信呢???电信它凭什么就不能出错,因为你每个月给了它许多钱而我的薪资很低吗?你给它钱它就一定不会出错吗?得钱的是谁?不见得是电信真正维护网络的一线人员,而且也不见得那个维护的人员是凭本事而进电信的.网络维护不象文字资料处理等事情,水平够不够一下就能现出原形的...什么叫无知?不认真分析问题就贸然处理并留下一个烂摊子就叫无知!

   唉,可怜的我

mengjia 发表于 2005-01-19 09:55

非法关机的时候,postgresql启动故障的解决(牢骚版)

同情ing 。
不过老兄遇到FATAL:pre-existing shared memory block (key 5432001, ID 0) is still in use
HINT:If you're sure there are no old server processes still running, remove the shared memory block with the command "ipcrm", or just delete the file "/var/lib/pgsql/data/postmaster.pid".
   的情况还是比较多的。毕竟postgres还不是商业软件。

skylove 发表于 2005-01-19 13:24

非法关机的时候,postgresql启动故障的解决(牢骚版)

偶素pg新手,所以就把解决的思路写出来咯...因为pg版似乎有个特点,没有太多的高端讨论,也没什么入门讨论...我在这里写触发器的时候没找到什么讨论,入门的也没太多...所以我想或许大家都是从mysql或者oracle转用它的居多...正好遇到这简单问题,就写咯...方便一下新手也好

lhq_hs 发表于 2005-01-20 09:22

非法关机的时候,postgresql启动故障的解决(牢骚版)

请问下面的问题如何解决:sco unix 5.0.5环境,也是突然断电
=>;pg_ctl start
LOG:database system was interrupted being in recovery at 2005-01-18 17:40:06 CST
      This probably means that some data blocks are corrupted
      and you will have to use the last backup for recovery.
LOG:checkpoint record is at 0/7C19E64C
LOG:redo record is at 0/7C19E64C; undo record is at 0/0; shutdown FALSE
LOG:next transaction id: 3041910; next oid: 1019812
LOG:database system was not properly shut down; automatic recovery in progress
postmaster successfully started
=>;LOG:redo starts at 0/7C19E68C
PANIC:Invalid page header in block 1648 of 18548
LOG:startup process (pid 681) was terminated by signal 6
LOG:aborting startup due to startup process failure

skylove 发表于 2005-01-20 12:45

非法关机的时候,postgresql启动故障的解决(牢骚版)

兄弟,看来您是在数据库大量读写的时候机器挂掉了....比我惨多了

我没用过sco,看日志上来看...pgsql 似乎在尝试回滚操作,到
database system was not properly shut down; automatic recovery in progress
postmaster successfully started
这里看来,似乎就已经成功启动了

之后您进行的操作失败的原因俺就不清楚了,我是在linux上用的pgsql

lhq_hs 发表于 2005-01-20 18:36

非法关机的时候,postgresql启动故障的解决(牢骚版)

没有成功启动,回滚时遇到18548这个block错误,PANIC: Invalid page header in block 1648 of 18548 ,然后就歇菜了

ibmpcs 发表于 2005-01-28 22:48

非法关机的时候,postgresql启动故障的解决(牢骚版)

没办法,免费的。
忍忍吧,已经很不错了!:D

leihuo22 发表于 2005-01-31 16:38

非法关机的时候,postgresql启动故障的解决(牢骚版)

同情,维护的时候是 很容易碰到这些问题的```````能忍就忍了吧

starword 发表于 2005-02-02 13:29

非法关机的时候,postgresql启动故障的解决(牢骚版)

感觉是断电的时候引起的数据文件或者日志文件损坏.
不过在看7.0的文档的时候看见:
LOG_MIN_ERROR_STATEMENT (string)
控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。 所有导致一个特定级别(或者更高级别)的错误的 SQL 语句都要 被记录日志。 缺省是 PANIC (实际上是把这个特性关闭了)。有效的值有 DEBUG5, DEBUG4,DEBUG3, DEBUG2,DEBUG1, INFO,NOTICE, WARNING,ERROR, FATAL,和 PANIC。 比如,如果你把这个设置为 ERROR, 那么所有导致错误,致命错误,或者恐慌的 SQL 语句都将被记录日志。 打开这个选项可以帮助跟踪那些在服务器日志里出现的任何错误的源头。

我们建议你也吧 LOG_PID 打开,这样你就可以更 容易讲错误语句和错误信息对应起来。

把这个设成error,然后把服务器运行日志保存下来,看看是那句有问题.
页: [1]
查看完整版本: 非法关机的时候,postgresql启动故障的解决(牢骚版)