Postgresql9.1.2意外删除postmaster.pid文件的恢复

起因是我修改了参数,然后 ,然后报错 : PID file “//xjwq/1953///.pid” does not exist
这时才发现.pid不在,那我们就重构一个吧 。
1. 首先看一下.pid文件的内容:
cd $PGDATAcat postmaster.pid4188//postgresql主进程号/pgdata/xjwq/1953/data02/pg_root15858467091953/pgdata/xjwq/1953/data02/pg_root0.0.0.019530014227076

Postgresql9.1.2意外删除postmaster.pid文件的恢复

文章插图
2. 分别对内容做一下解释,以及在文件删除后,如何重建
1.查看进程号可见为4188ps -elf | grep"postgres -D"0 S postgres418810750 - 324843 -Apr02 ?00:01:16 /opt/pgsql/bin/postgres -D /pgdata/xjwq/1953/data02/pg_root -p 19532.数据库目录,也就是$PGDATA,这里是/pgdata/xjwq/1953/data02/pg_root3.文件创建时间,可以模糊认为是进程启动时间,即4188启动的时间,这里是epoch时间,需要转换,可以通过以下命令取到,时间为16:58:29 2020,然后去转换为epoch时间ps -eo pid,lstart,etime|grep 41884188 Thu Apr2 16:58:29 20201-00:13:30也可以进入数据库查看:postgres=# select pg_postmaster_start_time();pg_postmaster_start_time-------------------------------2020-04-02 16:58:34.081295+08(1 row)这里看到有些偏差,文件里记录的时间应该是文件创建的时间postgres=# select extract(epoch from '2020-04-02 16:58:34'::timestamp);date_part------------1585817914(1 row)目前看来时间不需要特别精准,我给文件写入时间后,都可以正常使用4.数据库端口,即数据库参数port设置5.unix_socket_directory参数设置的目录,这里还是$PGDATA6.监听地址,listen_addresses参数值7.共享段地址的值,这里是key,shmid,通过以下命令取的ipcs -m------ Shared Memory Segments --------keyshmidownerpermsbytesnattchstatus0x001dcce9 4227076postgres6001214545920 641文件里面都是10进制,0x001dcce9转换10进制的值为1953001,然后写入4227076
3. 找一个正常的数据库复制一个文件,按照上面逐项修改,最后把权限设置为600,重新使用 ,一切正常了 。
$chmod 600 postmaster.pid把文件复制到$PGDATA$pg_ctl reloadserver signaled
Postgresql9.1.2意外删除postmaster.pid文件的恢复

文章插图
4. 以下是需要用的转换工具
登陆以下网址进行时间转换:
【Postgresql9.1.2意外删除postmaster.pid文件的恢复】登陆以下地址可以进行16转10进制