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