查看原文
其他

Postgres 异常断电导致启动失败的解决方法

twt社区 twt企业IT社区 2022-07-03





【作者】泊涯,公司分部测试经理,集团公司技术专家成员之一,目前主要在客户现场做银行系统的性能诊断分析优化和测试管理工作。



问题起因:

前段时间客户生产服务器,突然不小心弄断电了,虽然运维人员重启服务后,看似能正常访问,但是出现主从无法正常同步数据问题,而重新启动服务后,报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)。

如有任何问题,可点击文末阅读原文,到社区原文下评论交流
觉得本文有用,请转发或点击“在看”,让更多同行看到


 资料/文章推荐:

欢迎关注社区 “PostgreSQL”技术主题 ,将会不断更新优质资料、文章。地址:

http://www.talkwithtrend.com/Topic/112101


下载 twt 社区客户端 APP

与更多同行在一起

高手随时解答你的疑难问题

轻松订阅各领域技术主题

浏览下载最新文章资料


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

*本公众号所发布内容仅代表作者观点,不代表社区立场

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存