skylove
非法关机的时候,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有什么地方做得不够好,而不肯怀疑一下电信呢???电信它凭什么就不能出错,因为你每个月给了它许多钱而我的薪资很低吗?你给它钱它就一定不会出错吗?得钱的是谁?不见得是电信真正维护网络的一线人员,而且也不见得那个维护的人员是凭本事而进电信的.网络维护不象文字资料处理等事情,水平够不够一下就能现出原形的...什么叫无知?不认真分析问题就贸然处理并留下一个烂摊子就叫无知!
转自:
http://bbs.chinaunix.net/archiver/tid-484595.html