首页主机资讯PostgreSQL故障排查指南CentOS版

PostgreSQL故障排查指南CentOS版

时间2025-11-28 12:20:04发布访客分类主机资讯浏览983
导读:CentOS 上 PostgreSQL 故障排查指南 一 快速定位流程 确认服务状态与单元名称:常见为 postgresql-<版本>(如 postgresql-12),执行:sudo systemctl status pos...

CentOS 上 PostgreSQL 故障排查指南

一 快速定位流程

  • 确认服务状态与单元名称:常见为 postgresql-< 版本> (如 postgresql-12),执行:sudo systemctl status postgresql-12;若提示未初始化,按提示执行:sudo postgresql-setup --initdb(或 postgresql-setup initdb)。
  • 查看日志:优先看服务日志与数据库日志。服务侧:sudo journalctl -xe -u postgresql-12;数据库日志通常在 PGDATA/log/ 目录(若启用日志收集器),或发行版默认目录(如 /var/log/postgresql/)。
  • 核对端口与套接字:端口检查 ss -lntp | grep 5432;套接字常见路径 /var/run/postgresql/.s.PGSQL.5432/tmp/.s.PGSQL.5432
  • 直连数据库做内部诊断:sudo -u postgres psql -c "SELECT version(); "SELECT * FROM pg_stat_activity;

二 常见故障与修复

  • 服务起不来且提示数据目录缺失或未初始化:错误信息含 “/var/lib/pgsql/data is missing or empty”。修复:sudo postgresql-setup --initdb,再 sudo systemctl start postgresql-12

  • 端口被占用:日志或 ss -lntp | grep 5432 显示 5432 被占用。处理:停掉占用进程或调整 postgresql.confport,随后 systemctl restart postgresql-12

  • 本地连接被拒绝或认证失败:报错如 “Connection refused”“no pg_hba.conf entry”。修复:在 postgresql.conflisten_addresses 设为 '*'(或服务器IP);在 pg_hba.conf 为需要的来源添加规则,例如:host all all 0.0.0.0/0 md5(生产环境请限制网段并使用强认证)。

  • 套接字或临时目录问题:报错涉及 “/var/run/postgresql/.s.PGSQL.5432”“/tmp/.s.PGSQL.5432.lock”。处理:确认目录存在且属主为 postgres,必要时在 postgresql.conf 设置 unix_socket_directories 指向有效目录(如 /var/run/postgresql),并确保 /tmp 可写。

  • 磁盘空间耗尽导致无法启动:典型错误 “could not write lock file … No space left on device”。处理:清理根分区(如 journalctl --vacuum-size=100Myum clean allrm -rf /tmp/* /var/tmp/*),或将 PGDATA临时目录迁移到空闲磁盘并更新配置与 systemd 环境。

三 日志与配置要点

  • 启用与集中日志:在 PGDATA/postgresql.conf 开启 logging_collector = on,并设置 log_directorylog_filenamelog_statement(如 allddl)、log_min_duration_statement(单位毫秒)以记录慢查询与关键语句。

  • 日志轮转与归档:结合 PostgreSQL 参数与系统 logrotate 控制单个文件大小与保留周期;长期保留可接入 ELK/FluentdpgBadger 做分析与报表。

  • 常见关键配置:listen_addresses(建议按需开放)、port(默认 5432)、unix_socket_directories(套接字目录)、max_connectionsshared_bufferswork_memlog_statementlog_min_duration_statement。修改后执行 systemctl reload postgresql-12 生效。

四 远程访问与 pgAdmin 排障

  • 防火墙放行:在 CentOS 执行 sudo firewall-cmd --permanent --add-port=5432/tcp & & sudo firewall-cmd --reload

  • 服务端配置:在 postgresql.conf 设置 listen_addresses = '*'(或指定内网IP),在 pg_hba.conf 为客户端网段添加规则(如 host all all 192.168.1.0/24 md5)。

  • SELinux:若启用 SELinux,数据目录迁移后执行 sudo restorecon -Rv /var/lib/pgsql 修复上下文。

  • pgAdmin 自身:确认 pgAdmin 服务/容器运行,检查其日志(常见路径 /var/log/pgadmin4/pgadmin4.log),必要时重装或更新;Web 端可清缓存或更换浏览器测试。

五 维护与应急脚本

  • 一键健康检查:
    • 服务与端口:systemctl is-active postgresql-12 & & ss -lntp | grep 5432
    • 连接与会话:sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity; "
    • 近期错误:grep -i error $PGDATA/log/*.log | tail -50
  • 安全重启:systemctl reload postgresql-12(不中断会话的热加载)或 systemctl restart postgresql-12(变更后需要)。
  • 空间紧张应急:优先清理系统日志与缓存,必要时临时迁移 PGDATA临时目录至大磁盘分区,并修正 postgresql.conf 与 systemd 的 PGDATA 路径后启动。
  • 变更前务必备份:逻辑备份 pg_dumpall -U postgres > backup.sql 或按库 pg_dump -U postgres db > db.sql

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PostgreSQL故障排查指南CentOS版
本文地址: https://pptw.com/jishu/758905.html
k8s部署在centos上遇到问题怎么解决 如何在CentOS中备份PostgreSQL数据库

游客 回复需填写必要信息