Postgresql9.1.2意外删除postmaster.pid文件的恢复
起因是我修改了参数,然后 ,然后报错 : PID file “//xjwq/1953///.pid” does not exist
这时才发现.pid不在,那我们就重构一个吧。
1. 首先看一下.pid文件的内容:
cd $PGDATA
cat postmaster.pid
4188 //postgresql主进程号
/pgdata/xjwq/1953/data02/pg_root
1585846709
1953
/pgdata/xjwq/1953/data02/pg_root
0.0.0.01953001 4227076
2. 分别对内容做一下解释,以及在文件删除后,如何重建
1.查看进程号可见为4188
ps -elf | grep "postgres -D"
0 S postgres 4188 1 0 75 0 - 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 4188
4188 Thu Apr 2 16:58:29 2020 1-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 --------
key shmid owner perms bytes nattch status
0x001dcce9 4227076 postgres 600 1214545920 641 文件里面都是10进制,0x001dcce9转换10进制的值为1953001,然后写入4227076
3. 找一个正常的数据库复制一个文件,按照上面逐项修改,最后把权限设置为600,重新使用 ,一切正常了。
$chmod 600 postmaster.pid
把文件复制到$PGDATA
$pg_ctl reload
server signaled
4. 以下是需要用的转换工具
登陆以下网址进行时间转换:
登陆以下地址可以进行16转10进制