ETJava Beta | Java    注册   登录
  • 搜索:
  • PG数据库导致断电/重启无法正常启动问题排查

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/runnerjack/p/18377822
    如有侵权 请联系我们删除  (页面底部联系我们)  

    PG数据库导致断电/重启无法正常启动问题排查

    一、问题

    数据库断电后,启动PG数据库后无法正常启动,报”psql: could not connect to server: No such file or directory”的错误,错误图片如下:

     

     

    二、背景分析

    数据库是单机版,使用k8s进行部署运行在指定节点,数据目录挂服务器的指定目录。在数据中心机房部署了两套k8s集群,但是pod网络未规划好,两个集群pod网段有重复导致两个集群之间的pod概率性的发生地址冲突。在发生ip重复了后修改了我方使用的k8s集群的pod网段,并对所有pod进行了重启,在执行重启操作后我方部署pg数据库无法正常提供服务,经过查询容器日志发现了上述问题。

    三、解决过程

    ①   根据日志进入容器查看文件是否存在

    kubectl exec -it -n namespace contairnerId /bin/sh

    进入容器后发现/var/run/postgresql/.s.PGSQL.5432文件不存在,然后进入一个正常的pg数据库容器,发现该文件是存在的,因此确认pg数据库的进程不正常。

    ②   查看pg数据库进程是否存在

    cat /var/lib/postgresql/11/main/master.pid

                       查看后结果和含义如下:

     

      

              1)154->数据库的主进程号,可以通过ps -ef | grep postgres来查询,同时与/var/run/postgresql/11-main.pid里的值一致。

         2)/var/lib/postgresql/11/main->数据库的数据目录

         3)1724468744->数据库的启动时间,需要进行转换

              4)5432->数据库端口号

         5)/var/run/postgresql->PostgreSQL 的 Unix 域套接字目录

             然后通过执行top命令,发现pg数据库的进程并未启动,因此进一步确认pg数据库未正常启动。

    ③   重新启动pg数据库进程,发现问题原因

    执行以下命令启动数据库:

    ./usr/lib/postgresql/11/bin/pg_ctl  /var/lib/postgresql/11/main start

    执行完以后在当前屏幕输出有“invalid primary checkpoint record”等字样,翻译之后就是检查点损坏的意思。

    ④   修复检查点

    使用数据库自带工具对检查点进行修复,进入数据库容器,切换到postgres用户,使用PG自带工具修复,执行命令如下:

    ./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main

              修复完后启动数据库进程:

                       /usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start

     

         再通过navicat工具连可正常访问数据库了。

    四、总结

    原因定位:异常重启或断电异常了数据文件损坏,pg数据重启后在加载数据文件时发现检查点损坏,无法正常启动。

      解决方法:使用pg自带工具进行检查点修复:

    1)  进入数据库容器,切换到postgres用户;

    2)  找到pg_resetwal工具,对指定数据文件进行修改,以下是本次修改的命令

    ./usr/lib/postgresql/11/bin/pg_resetwal –D /var/lib/postgresql/11/main

     

    3)  启动数据库

    ./usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main start