PG数据库导致断电/重启无法正常启动问题排查
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

PG数据库导致断电/重启无法正常启动问题排查的更多相关文章
- oracle断电重启之ORA-00600[4194]
1.问题描述 Oracle服务器断电重启以后无法数据库无法正常连接,使用sqlplus envision/envision连接报错.常见的错误有以下这些: ORA-12518: TNS:listene ...
- pg数据库数据表异常挂起
pg数据库即是PostgreSQL数据库. 前几天在一个Java项目中,出现运行Java程序后,pg数据库的数据表异常挂起.而且是在某台电脑上出现的,重装数据库也没用,其它电脑未能复现,是个很奇怪的现 ...
- k8s node断电重启
kubernetes断电重启 导致部分pod无法删除 dashboard上处于黄色 kubectl get处于terminate 状态 kubectl delete报错: An error occur ...
- Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题
最近项目中遇到一个问题,用户第一次安装应用在系统的安装器安装完成界面有“完成”和“打开”两个按钮. 当用户点击“打开”按钮进入用户注册页面进行手机号验证码发送和验证码输入等操作界面,若此时用户点击Ho ...
- rac 11g_第二个节点重启后无法启动实例:磁盘组dismount问题
原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...
- windows 2008 R2 断电重启进入修复模式
windows 2008 R2 意外断电重启进入修复模式 现在出现一个问题,就是当机房停电的时候,计算机自动进入到修复模式,当人不在机房的时候,容易造成服务器无法访问,我相信正常启动应该没什么问题吧, ...
- linux异常处理:selinux配置错误导致无法重启
点击返回自学Linux集锦 linux异常处理:selinux配置错误导致无法重启 一次linux无法重启异常记录: 当时第一反应就是梳理最近的配置变更,特别是能预知相关的就是selinux配置变更. ...
- 关于xampp 集成开发包电脑重启mysql无法启动的问题
关于xampp 集成开发包电脑重启mysql无法启动的问题. 在做php开发时,安装过xampp,也不知道是版本老了还是什么问题,总是出现当天晚上下班关机,第二天上班mysql不能启动,在网上查找些资 ...
- 修改Windows帐户密码,导致Sql Server 2000无法启动
修改Windows帐户密码,导致Sql Server 2000无法启动. --现象以管理员或同等权限用户登录 Windows XP,建立 Sql Server 2000 数据库.之后,在修改此 Win ...
- 【k8s node断电重启】
kubernetes断电重启 导致部分pod无法删除 dashboard上处于黄色 kubectl get处于terminate 状态 kubectl delete报错: An error occur ...
随机推荐
- 基于 Termux 和 ipv6 把手机打造成公网服务器
Termux 安装与配置 安装 从这下载: https://f-droid.org/en/packages/com.termux/ 初始化 授权读写手机储存 termux-setup-storage ...
- 理解shell
理解shell shell不单单是CLI,而是一种复杂的交互式程序. 1. shell的类型 当你登录系统时,系统启动什么样的shell程序取决于你的个人用户配置.在/etc/passwd文件中,用户 ...
- aiohttp 子线程启动/中止服务
import time, threading from aiohttp import web import asyncio async def handler(request): return web ...
- 开源GTKSystem.Windows.Forms,在这里更新预告
开源GTKSystem.Windows.Forms,在这里更新预告 gitee码云开源地址:https://gitee.com/easywebfactory/gtksystem-windows-for ...
- 10 pdf分享失败
PC端分享pdf,复制粘贴pdf链接后跳转搜索首页
- IP协议学习笔记
目录 IP地址格式 IP分类 CIDR 和 子网掩码介绍 NAT+公网.私网地址 CIDR 与 VLSM VLSM 子网划分案例 练习 Reference IP的作用类似物理世界中的地址,用于定位机器 ...
- Linux如何安装PHPMyAdmin
1,我们要以root帐号登入 . 2,PHP支持模块安装.在CentOS操作系统安装完毕后,其实PHP支持模块并没有安装上去,如果想使用PhpMyAdmin,首先需要安装PHP支持模块,我们需要两个P ...
- 全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图
全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图 摘要: 本文主要介绍了 Python 中创建自定义类时如何使用多重继承.菱形 ...
- webpack4.15.1 学习笔记(二) — 配置及开发环境构建
目录 基本安装 配置文件 管理资源 管理输出 构建一个开发环境 使用 source map 选择一个开发工具 观察模式 webpack-dev-server webpack-dev-middlewar ...
- oeasy教您玩转vim - 65 - # 批处理操作
批处理操作 回忆上次 我们上次参数列表 arguments list 所谓参数列表指的是 vim 打开的 参数列表 参数会加载到内存中成为 buffer 参数的控制 :arga filename ...